为DOSBOX增加外部串口功能

news/2025/2/5 19:32:05/

如果DOSBOX内部串口与宿主机串口通互通,那DOSBOX中各种语言开发的程序均与外界有了串行通信功能,MODBUS with DOSBOX也就实现了。下面的操作,为DOSBOX打开通往外部的串行通信接口。

1. 在宿主机上创建虚拟串口对。方法是安装 Free 的 com0com 串口对程序,并创建成对的串口,比如图中的 COM1和COM2,接线方式是右侧一个红点可以接通数个绿色点,但一般情况下默认即可,无需自己改动连接线,所须做的工作是在 use Ports class 框打钩,并在上面的文本框中为串口起名字,显然要避开已有串口,否则冲突了会创建失败。

如果有实体串口空闲,可以忽略这一步。这一步的目的是让宿主机有串口可供DOSBOX绑定使用,宿主机串口被DOSBOX绑定后,因被占用就不能在宿主机上操作了。对于串口对,绑定一个可以操作另一个; 对于实体串口,绑定后宿主机的串口只能外连串口设备使用了。两者用法不太相同。

 在宿主机的设备管理器上看一下,会在端口下找到创建的串口对。

2. 将COM1绑定给DOSBOX

在DOSBOX的配置菜单中,进入Serial Ports,然后在 serial1处填写 directserial realport:com1,如果还要绑定其它口,则在下面的串口处继续绑定。意思是:DOSBOX的serial1,与宿主机的COM1是直接绑定的。因为COM1和COM2是串口对,所以,在宿主机上操作COM2即相当于操作COM1,而宿主机的COM1就是DOSBOX的serial1,如此内外就连接起来了。

3. 在宿主机上操作COM2

可以下载使用宏晶科技单片机串口烧写和调试用的ISP软件,其它串口助手也都可以使用,它们大多是免费的。可以选用文本方式、自动发送、发送时自动发送结束符,这样在DOSBOX中的程序接收时,方便接收ASCII字符串。

 4. 在DOSBOX中测试对宿主机发送数据的接收。在DOS中进入QBasic开发环境,用QB帮助里面的示例稍加改造

COLOR 15, 1
CLS
'Set up error handling in case COM1 doesn't exist.
ON ERROR GOTO ErrHandler                          
'Open the COM port.                       
OPEN "COM1:9600,N,8,1,BIN" FOR INPUT AS #1'Turn on COM event processing.            
COM(1) ON                                 
'Set up COM event handling.               
ON COM(1) GOSUB Com1Handler               
'Wait for a COM event to occur or a key to be pressed. 
DO                                                     
LOOP WHILE INKEY$ = ""                                 
'Turn off COM event handling.                          
COM(1) OFF                                             
CLS                                                    
END                                                    Com1Handler:                                                                  COM(1) OFF                                                                LINE INPUT #1, A$                                                         PRINT A$; TIME$;                                                          '"Something was typed on the terminal attached to COM1."                  COM(1) ON                                                                 RETURN                                                                    ErrHandler:                                                                   SELECT CASE ERR                                                           CASE 68: PRINT "COM1 is unavailable on this computer.": END           CASE ELSE: END                                                        END SELECT

启动宿主机ISP程序自动发送数据,运行DOSBOX中上面的QBASIC程序。

 如果串行通讯程序在宿主机上,用串口对比较方便; 如果程序在其它计算机上,DOSBOX可以绑定到实体串口上进行交互通讯。总之,被DOSBOX绑定的串口是DOSBOX独占的,宿主机不能直接操作(但可以通过串口对交互)。Modbus是协议层的,可在RS232和RS485跑协议,因此,DOSBOX可以通过串口调试Modbus设备,或编程使用Modbus设备。另外,DOS时代一些游戏软件是用串口组网对战的,DOSBOX绑定串口后那些游戏又能组网玩味了。


http://www.ppmy.cn/news/1064209.html

相关文章

AI个体户的崛起:普通人“屁胡”的机会、模式和风险

前几篇文章写的是大模型本身以及垂域中的系统型超级应用(AI Agent类),这些机会很大,不管你是真的做得来大模型,还是能做得了某个行业的系统型超级应用,成功者最终都会是这个时代的成功者。 是什么样子的时…

IO进程线程,文件与目录,实现linux任意目录下ls -la

注意文件的名字、路径是如何输入的。 函数opendir打开目录,struct dirent,struct stat这些结构体的含义。 readdir()函数是一个用于读取目录内容的系统调用或库函数,在类Unix操作系统中(如Linux)广泛使用。它用于遍历…

CSS引入方式

行内样式&#xff1a;写在标签的style属性中 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" …

记录一次Modbus通信的置位错误

老套路&#xff0c;一图胜千言&#xff0c;框图可能有点随意&#xff0c;后面我会解释 先描述下背景&#xff0c;在Modbus线程内有一个死循环&#xff0c;一直在读8个线圈的状态&#xff0c;该线程内读到的消息会直接发送给UI线程&#xff0c;UI线程会解析Modbus数据帧&#xf…

软件架构业务及技术复杂度分析总结

目录 一、综述分析 二、业务复杂性分析 &#xff08;一&#xff09;领域建模 &#xff08;二&#xff09;领域分层 &#xff08;三&#xff09;服务粒度 &#xff08;四&#xff09;流程编排 三、技术复杂性分析 &#xff08;一&#xff09;高可用 底层逻辑 CAP原则 …

springboot整合第三方技术邮件系统

springboot整合第三方技术邮件系统&#xff0c;发邮件是java程序的基本操作&#xff0c;springboot整合javamail其实就是简化开发。不熟悉邮件的小伙伴可以先学习完javamail的基础操作&#xff0c;再来看这一部分内容才能感触到springboot整合javamail究竟简化了哪些操作。简化…

【CSS】轮播图案例开发 ( 基本设置 | 子绝父相 | 浏览器水平居中 | 圆角设置 | 绝对定位居中设置 )

代码示例 : <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Banner 轮播</title><style>/* 取消浏览器或者其它标签的默认的内外边距 */* {margin: 0;padding: 0;}/* 取消列表样式 主要是…

Mybatis-Plus如何进行时间日期的比较

获取数据库中跟当前日期相等的记录时&#xff0c;还是调用eq方法&#xff0c;所以实体类包括数据库中的类型是Date&#xff0c;而不是DateTime&#xff0c;否则只能获取相同时刻的数据。 pulbic void main(){LocalDate now LocalDate.now();LambdaQueryWrapper<Ebbinghaus…