- 主题:假设往 DOS 机器里面安装了 1MB 内存
ibm给常用的外设规定了io地址和内存地址,比如显卡占用c0000开始的32k。声卡和网卡也有对应的地址范围。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 每家公司?也就是每个外设使用的内存地址都可能不一样?
:
: 比如我往里面装一块显卡、一块声卡、一块网卡、一块 MIDI 卡的话,它们冲突了怎么办?
:
--
FROM 117.136.89.*
cpu通过总线和外设交换数据,低速是io端口方式,高速是dma和内存映射。内存映射最快最直接,但是如你所说,地址有限,只能用dma模式。硬盘和网卡也是dma。1M内的高段内存一开始主要是给外设的bios用的,那32k是显卡bios的位置,不是交换数据用的。同样,网卡也需要bios,ide硬盘的bios包含在系统bios之中,但scsi的bios是需要从高段内存里加载的。
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 显卡才占用 32KB? 这怎么够用啊?后面的 VGA 需要 640*480 个字节我算了一下是 300KB 来着。是不是得先写一部分,然后刷到显存里面再次写?当年 16 色的系统用起来很有质感。
:
: 像这种规定,有没有什么相关的文档?我去看一下还有没有其它细节?
:
--
FROM 117.136.89.*
跳线。想在机箱里加一块板卡,首先要知道已经插进去多板卡们都占了哪些io端口、中断号、dma通道,然后设置板卡跳线避开。古早计算机是isa总线,你看一下总线定义,中断和dma多信号有好几组,因为这是硬线,实实在在的线路,不能冲突。后来intel和ms搞了个pnp即插即用,因为isa的硬伤,要到pci时代才实用化。pci只有一组请求线,通过软件动态分配资源给板卡。
内存映射是硬件已经决定的,从a00000开始固定映射到总线上。板卡的地址线译码决定占用哪段内存。其实用内存映射的板卡很少,大部分还是用dma
【 在 hgoldfish (老鱼) 的大作中提到: 】
: 那这些外设是使用什么方案提供多个选项的?启动 DOS 的时候先用驱动程序向外设发消息?一般是用什么方案发消息?当年通过 PCI 或者更古董的那个啥槽发消息有统一的接口吗?
:
: 读写某段内存地址就指向外设,这样的机制是由 CPU 提供的?8086 提供哪个机制来设置内存地址段?
:
--
FROM 117.136.89.*