30天自制操作系统吧 关注:1,381贴子:4,820
  • 21回复贴,共1

自制操作系统中驱动声卡的实验

只看楼主收藏回复

一个自制操作系统,30天后的目标是什么?大概应该要能满足:
1,在实机电脑的硬盘或U盘起动并运行。
2,满屏图像分辨率,32bit色彩。至少要达到XGA。现在还要满足宽屏显示器。
* 3,驱动声卡。即能播放语音和音乐。
4,驱动网卡。
声卡种类繁多,大致可分为三大类:
一,SoundBlaster声卡。它在90年代的电脑中得到普遍使用。比如SB16是16bit,支持44.1KHz
采样频率。音质可比CD。可在DOS系统和Windows95系统中使用。其控制原理与后来发展的声卡
相比要简单一些,对初次挑战声卡的人来讲,相对容易实现。
二,从1997开始出现了声卡的AC'97标准。电脑主机也开始引入32bit的PCI总线,淘汰16bit的
ISA总线。
现在能在“闲鱼”看到的各种声卡,大多是PCI插口声卡。在PCI声卡可分为两类:
一类是与AC'97对应;
一类是声卡厂家自己定义的规范。
由于AC'97声卡规范了大多数声卡厂家,这样自制操作系统就有可能支持不同厂家的声卡
(其实也不尽然)。这里除了要掌握具体型号声卡的原理外,还要掌握PCI总线的知识。
三,好景不长,到了大约2005年,电脑界又推出了High Definition Audio标准。称音质和性能
更加厉害,支持到32bit,采样频率最高为192KHz,多通道。那为什么要说“好景不长”呢?因为
High Definition Audio虽然基本思路与AC'97相似,也是采用Codec芯片与chipset芯片分开的方式,
但它们是不兼容的。AC'97的规范在High Definition Audio中不适用的。其控制原理又比AC'97更
加复杂,难度自然是又高出一级。
现在电脑上的“声卡”,基本都是High Definition Audio标准。大家可以在自己的电脑的控制面板
->系统->硬件列表中查到。都是把音频处理的相关功能集成在chipset里面。codec芯片在焊在
主板上了。不用另外买声卡。
(待续)


IP属地:上海1楼2022-04-09 17:58回复
    一,SB16声卡的实验:
    在自作操作系统里,驱动SB16声卡,相对来说是还算容易一点。
    这种声卡是用ISA bus,现在要找装有ISABus的老古董主板有些
    困难。我用的是东芝老古董笔记本电脑Satellite 330CDT,内置SB16
    声卡。
    声卡放音的基本原理是把音频数据送到声卡内的DSP芯片,经D/A
    转换为模拟量,再由AMP功放驱动喇叭。把音频数据送到声卡DSP有
    两种方法,一是通过io_out8()输出命令,一次一个数据传出。这是最
    简单的方法,缺点是占用CPU大量时间,传送数据的间隔与音频的采
    样频率相关。以8KHz为例,一秒钟要发送8KB(仅支持8bit)。自作
    操作系统的定时器是10ms,显然不能使用。只好用延迟程序解决,
    这样就独。占CPU资源,播放的声音质量差,容易走调。
    二是通过DMA传输方法。这也是标准用法。特点是传输过程中不需要
    CPU参与,音频数据直接从内存通过数据总线传至声卡,声卡按设置的
    速率播放。支持16bit,立体声双声道。
    参考文献是《Sound Blaster 16 Programming Document》,网上能搜索
    的。
    “闲鱼”有SB16声卡的笔记本电脑,价格也不便宜,大约在300元左右。
    有一个省钱的方法: 用VMware 虚拟机软件,它可以设置为SB16声卡。
    初学者可以先试试直接I/O输出方法,用VMware 虚拟机软件播放声音。
    然后再进一步,用正规的DMA方法。


    IP属地:上海2楼2022-04-11 14:17
    回复
      前两个也太简单了,《30天》里的系统只要写入U盘并且把U盘设为USB-FDD启动模式就可以直接在实机运行了,32bit模式只要修改一下vbe模式号和模式号检查方法,然后去掉调色板设置,吧颜色改成32位就行了。声卡什么的可以先放一放,最重要的是实现硬盘驱动,不然只能在软盘中运行,要读取文件还必须把软盘全部读入内存,开销太大了


      IP属地:福建来自Android客户端3楼2022-04-20 21:28
      收起回复
        在《x86汇编语言:从实模式到保护模式》的随书附赠资料(原稿第十章)有SB16(声霸卡)的使用方式,具体请见其书的支持网站的资源,包括硬件开发手册和源代码程序(c10.asm)。
        值得注意的是,目前电脑大多已经不支持,需要虚拟机才能使用(详情请看随书附赠资料(原稿第十章))


        IP属地:山东4楼2022-04-22 02:09
        收起回复
          等有空时,再继续介绍在自制操作系统中使用 SB16,AC97,HDAudio声卡的一些内容。5.15。


          IP属地:上海5楼2022-05-15 13:39
          回复
            翻出以前的Satellite 4020CDT电脑。这台电脑的CPU是奔腾II 300MH,屏幕是XGA,
            内置SB16声“卡”,软驱和光驱。两个PCICIAII插槽,一个USB口,还有RS232C插口。
            我觉得是很合适做“30天”的试验机的。不满之处是液晶还不是32bit真彩,是16bit的彩色。
            当时是对应Windows98的中端级别的笔记本电脑。高端的是Tecra系列,是24bit,还不
            没有达到32bit。
            硬盘支持最大容量是8GB,现在用8GB的CF卡加转接器代替,速度比硬盘快。
            照片上的图片仍然按“纸娃娃”的“间色法”显示图像,即还是256色。
            当时还没有实现mp2解码,是直接播放wav格式,不太消耗CPU。为了缩小存储量,
            采用11025Hz采样频率,单声道,8bit。可以播放90分钟的音频节目。

            打开看,屏幕的中央已经开始“雾化”了,古董的电脑就是这样慢慢老去。所幸还能开机,
            声音还洪亮。
            在DOS时代,就有播放软件了。我当时是通过DEBUG查看里面的汇编指令,找到关键的
            DMA处理部分,改编在纸娃娃OS上实现的。因为SB16的输入输出口地址是固定的0x220~0x22F
            ,所以用DUBEG还是比较容易找到关键位置的。如果是Windows播放软件,我就没有办法破
            解了。
            “闲鱼”不久前还有人出售Satellite 4020CDT电脑,也不便宜,大概400~500元。
            其他的Satellite 300~330CDT电脑也可以用,屏幕解像度要低一档SVGA。也要300元左右。
            其他接口都一样。CPU速度要慢一点。(提醒:买古董电脑需谨慎,老破病残次,无保障)
            1.23


            IP属地:上海6楼2024-01-23 12:34
            收起回复
              又从柜子里(不是床底下)翻出一台Satellite 330CDT,也是SB16内置声“卡”。
              它是12.1英寸的屏幕,SVGA 800x600个像素。看屏幕中的图像的尺寸明显大了一些。
              它与Satellite 4020CDT的DMA号不一样,前者是用DMA1,后者是用DMA0,DMA1
              是用作话筒输入的。只要开机时按F1键,查看BIOS的设置就知道。编程的时候可参照
              前面介绍过的几个表格里面设置规定即可,这些设置都是规定死的。

              这台是目前依然健在,屏幕也没有雾化老化,是以前用的比较顺手的电脑。以后要定期开
              开机。
              330CDT是300系列中最高一档,SPEC就是CPU的 MHz(忘记了)最高,没有4020CDT高。
              可以软盘起动,满足《30天自作OS入门》要求。也有光驱。还有现在已经淘汰的打印机用
              的并口,红外通讯口。


              IP属地:上海7楼2024-01-23 13:57
              收起回复
                如果自制操作系统中选择用SB16声卡,就要找上世纪90年代的电脑。都早已淘汰的古董电脑。
                CPU大约是奔腾II,200MHz前后,速度太低。SB16是属于16bit,与32bit操作系统也格格不入,
                有page的转换问题。还有液晶屏的色彩问题,普通的是256色,好一点也只有26万色。
                所以最好还是选择用32bit的声卡。首先会遇到PCI总线的问题。PCI设备定位有三个变量:
                总线,设备,功能。用三重循环语句,搜索声卡,找到声卡的位置。即找到声卡的配置空间的
                位置,并在+10H处,得到声卡的基地址。实际上是比较容易的。
                我一开始是考虑用ES1371声卡,原因是网上看到一篇介绍在VMware5 上运行ES1371声卡的
                文章。当时还是有一点信心的,因为已经有SB16也在实机上,虚拟机VMware10工作的实绩。
                但结果是无论怎么反复阅读规范书,按照理解去写代码,调试。结果都是一点声音也没有出来。
                这是最糟糕的结果,没有任何有益的反馈。幸运的印度瞎子至少还摸到了大象,我只摸到了空
                气。
                后来,采取逃跑机会主义,改为用CMI8738的声卡。只花了2天就搞出来了。虽然这两款都
                是插PCI声卡,难度的差异真是一个在天上,一个在平地。
                我这样认为,哪位网友通过自己看SPEC,写出自己的ES1371声卡代码,并能够调试出声音
                来的,一定是了不起的,令人尊敬的高手。
                下图是ES1371声卡,芯片是ES1373。可能是功能简易版。

                0602.


                IP属地:上海8楼2024-06-03 00:14
                回复