如何从QB45

2021-02-04 23:35

I中的BIOS读取comm port addresses一直使用以下代码从QB45中的BIOS获取comm port addresses:PRINTH400+x*2 p=PEEK(z)q=PEEK(z+1)a=q*quot;COMquot;

解答动态

  • 这是意料之中的;BIOS数据区只有四个插槽用于串行端口的I/O地址,紧接着是并行端口的插槽。在内存.LST拉尔夫·布朗的档案,我们可以找到以下条目0:
    MEM 0040h:0000h-第一个串行I/O端口MEM的基本I/O地址0040h:0002h-第二个串行I/O端口MEM的基本I/O地址0040h:0004h-第三个串行I/O端口MEM的基本I/O地址0040h:0006h-第四个串行I/O端口MEM的基本I/O地址0040h:0008h-第一个并行I/O端口MEM的基本I/O地址0040h:000Ah-第二个并行I/O端口的基本I/O地址MEM 0040h:000Ch-第三个并行I/O端口的基本I/O地址MEM 0040h:000Eh-第四个并行I/O端口(PS/2之前)的基本I/O地址MEM 0040h:000Eh-扩展BIOS数据段(PS/2,较新的BIOS)的段
    如果机器的串行端口多于BDA所能容纳的数量,则基本I/O端口地址必须以其他方式获得。1或者根本不可能:可以通过DOS驱动程序(通过打开COM设备文件的句柄并使用DOS系统调用与之交互)或中断&h14(尽管在基本情况下,只有通过调用汇编代码(例如,通过绝对调用)访问此类端口。如果不知道提供端口的具体设备,就不可能说得更多,也不可能解释Windows是如何发现这些端口的。然而,这个问题似乎意味着基本程序是在Windows下的DOS框中运行的。如果是这样的话,值得记住的是DOS盒是虚拟化环境,无论如何都不能直接访问硬件:I/O端口通信由DOS虚拟机处理,并传递给相应的Windows驱动程序,该驱动程序可能会将其映射到完全不同的设备。这意味着DOS框中可用的I/O端口不必对应于主机系统本机使用的相同I/O端口。但它也为我们提供了另一种选择:只需将串行端口号重新分配到一个较低的端口号,就可以在DOS框中使用预期的设备名和I/O地址。(实际上我自己并没有尝试过,但我知道至少可以为某些设备重新分配端口号。)
    0清单使用了段0040h的偏移量,而不是段0,但这只是相同物理地址的不同表示法。
    1假设它是通过ISA/LPC总线访问的8520兼容UART首先,比方说,USB上的RS-232适配器必须以完全不同的方式操作。

    • BIOS列表只包含引导时在标准地址处找到的最多四个标准8250型COM端口的地址。
      它将不包含四个以上的端口,它将不包含任何非8250型COM端口,以及非标准地址的COM端口,例如PCIE COM端口,以及没有IO地址的USB COM端口。它将不包含仅由Windows驱动程序等找到的端口。

      • BIOS数据区仅为40:00到40:07的四个com端口的地址留出空间。
        更多串行端口将由某个设备驱动程序驱动,并在其他位置存储地址和IRQ。

        • End

        免责声明:

        本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。