- 主题:假设往 DOS 机器里面安装了 1MB 内存
VGA不能通过MMIO访问,必须通过BIOS中断访问,这些BIOS中断就可以看作是VGA firmware提供的驱动程序给应用程序调用的接口吧
【 在 hgoldfish 的大作中提到: 】
: 显卡才占用 32KB? 这怎么够用啊?后面的 VGA 需要 640*480 个字节我算了一下是 300KB 来着。是不是得先写一部分,然后刷到显存里面再次写?当年 16 色的系统用起来很有质感。
: 像这种规定,有没有什么相关的文档?我去看一下还有没有其它细节?
--
FROM 104.133.9.*
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.*
像这种硬件与操作系统通信机制有没有啥书籍可以看的?
我最近觉得内存映射才是唯一正确的 API. 不止硬件与操作系统交互时应该使用内存映射,包括操作系统内核与用户程序的交互也应该使用内存映射。比如统一使用 mmap() 映射文件到内存,把 tcp 连接映射到无尽的内存地址段、信号量变成监测某个内存地址的内容等等
【 在 HighCloud 的大作中提到: 】
: cpu通过总线和外设交换数据,低速是io端口方式,高速是dma和内存映射。内存映射最快最直接,但是如你所说,地址有限,只能用dma模式。硬盘和网卡也是dma。1M内的高段内存一开始主要是给外设的bios用的,那32k是显卡bios的位置,不是交换数据用的。同样,网卡也需要bios,ide
: 才痰腷ios包含在系统bios之中,但scsi的bios是需要从高段内存里加载的。
--
FROM 110.84.122.*
意思是 UMA 里面其实都是些 BIOS ROM 代码,正常是不能写入的是吧?
【 在 HighCloud 的大作中提到: 】
: 跳线。想在机箱里加一块板卡,首先要知道已经插进去多板卡们都占了哪些io端口、中断号、dma通道,然后设置板卡跳线避开。古早计算机是isa总线,你看一下总线定义,中断和dma多信号有好几组,因为这是硬线,实实在在的线路,不能冲突。后来intel和ms搞了个pnp即插即用,因为is
: a的硬伤,要到pci时代才实用化。pci只有一组请求线,通过软件动态分配资源给板卡。
: 内存映射是硬件已经决定的,从a00000开始固定映射到总线上。板卡的地址线译码决定占用哪段内存。其实用内存映射的板卡很少,大部分还是用dma
: ...................
--
FROM 110.84.122.*
640*480但是只有16色, 用4bit, 分别映射到4个页面上, 总共需要256k内存
(实际上用到640*480/2=150k)
所以VGA显卡至少需要256k的显存, 我用的第一个显卡是Avance Logic ALS2064, 512K, 之后用SiS6202是1M.
32K这个应该是文本模式, 80*25*2只需要4k.
【 在 hgoldfish 的大作中提到: 】
显卡才占用 32KB? 这怎么够用啊?后面的 VGA 需要 640*480 个字节我算了一下是 300KB 来着。是不是得先写一部分,然后刷到显存里面再次写?当年 16 色的系统用起来很有质感。
像这种规定,有没有什么相关的文档?我去看一下还有没有其它细节?
【 在 HighCloud 的大作中提到: 】
: ibm给常用的外设规定了io地址和内存地址,比如显卡占用c0000开始的32k。声卡和网卡也有对应的地址范围。
--
FROM 222.129.6.*
...现代操作系统的基本特征之一就是虚拟地址, 两个进程里的同一个地址实际上是物理内存上的不同地址, 硬件提供了映射机制, 不然岂不是要乱套?
【 在 hgoldfish 的大作中提到: 】
像这种硬件与操作系统通信机制有没有啥书籍可以看的?
我最近觉得内存映射才是唯一正确的 API. 不止硬件与操作系统交互时应该使用内存映射,包括操作系统内核与用户程序的交互也应该使用内存映射。比如统一使用 mmap() 映射文件到内存,把 tcp 连接映射到无尽的内存地址段、信号量变成监测某个内存地址的内容等等
【 在 HighCloud 的大作中提到: 】
: cpu通过总线和外设交换数据,低速是io端口方式,高速是dma和内存映射。内存映射最快最直接,但是如你所说,地址有限,只能用dma模式。硬盘和网卡也是dma。1M内的高段内存一开始主要是给外设的bios用的,那32k是显卡bios的位置,不是交换数据用的。同样,网卡也需要bios,ide
: 才痰腷ios包含在系统bios之中,但scsi的bios是需要从高段内存里加载的。
--
FROM 222.129.6.*
进程访问的时候触发缺页中断,然后把 TCP 的数据读过来,写到物理页再返回不就行了。
【 在 tom6bj 的大作中提到: 】
: ...现代操作系统的基本特征之一就是虚拟地址, 两个进程里的同一个地址实际上是物理内存上的不同地址, 硬件提供了映射机制, 不然岂不是要乱套?
: 像这种硬件与操作系统通信机制有没有啥书籍可以看的?
: 我最近觉得内存映射才是唯一正确的 API. 不止硬件与操作系统交互时应该使用内存映射,包括操作系统内核与用户程序的交互也应该使用内存映射。比如统一使用 mmap() 映射文件到内存,把 tcp 连接映射到无尽的内存地址段、信号量变成监测某个内存地址的内容等等
: ...................
--
FROM 27.154.110.*
我的意思是显卡有这么多显存,就没法映射到 640KB-1MB 这个 UMA 里面了。
【 在 tom6bj 的大作中提到: 】
: 640*480但是只有16色, 用4bit, 分别映射到4个页面上, 总共需要256k内存
: (实际上用到640*480/2=150k)
: 所以VGA显卡至少需要256k的显存, 我用的第一个显卡是Avance Logic ALS2064, 512K, 之后用SiS6202是1M.
: ...................
--
FROM 27.154.110.*
(前面换成csdn的域名)cosmoslife/article/details/9179093
可以按这篇文章实际操作一下试试嘛
【 在 hgoldfish 的大作中提到: 】
: 我的意思是显卡有这么多显存,就没法映射到 640KB-1MB 这个 UMA 里面了。
--
FROM 124.16.158.*