第一章 RS-232概述 1
1.1 RS-232标准 1
1.2 标准省略的结果 2
1.3 ASCⅡ码——另一种RS-232-C吗 2
1.4 ASCⅡ码的问题 3
1.5 DTE和DCE 4
1.6 RS-232:物理接口 4
1.6.1 信号格式 6
1.6.2 数据线 7
1.6.3 标记和间隔 8
1.6.4 控制线 8
1.6.5 电线 9
1.7 RS-232-C规范的限制 9
1.8 电缆 10
1.8.1 空调制解调器电缆 10
1.8.2 更合理的电缆设计 12
1.8.3 RS-232 9到25针适配器 13
1.8.5 Macintosh电缆 14
1.8.6 使用电缆的建议 14
1.8.4 自制电缆 14
1.9 UART 15
1.9.1 8250系列产品 15
1.9.2 UART的发展 15
1.9.3 8250的功能 16
1.9.4 控制寄存器 17
1.9.5 状态寄存器 17
1.9.6 中断功能 17
1.9.7 16550的不同点 17
1.10 多端口板 18
1.9.8 16550的子代产品 18
1.11 智能多端口板 19
1.12 调制解调器 20
1.12.1 数据速率 21
1.12.2 智能 22
1.12.3 握手 24
1.13 流控制 24
1.13.1 硬件流控制 24
1.13.2 软件流控制 25
1.14 文件传输 26
1.13.3 本地流控制与直通流控制 26
1.15 软件和硬件工具 28
1.15.1 PC机软件 28
1.15.2 BBS软件 28
1.15.3 编程库 29
1.15.4 商业化工具 29
1.15.5 电缆制作设备 31
1.16 什么是Internet 33
1.17 小结 34
2.1.1 试用C语言 35
2.1 为什么使用C++ 35
第二章 RS232类 35
2.1.2 分析方法的弊端 36
2.1.3 用函数指针调度 36
2.1.4 将函数指针组成结构 37
2.1.5 为什么使用C++ 38
2.2 RS232类 39
2.2.1 一些约定 41
2.2.2 默认参数 43
2.3 RS232类的各个成员 44
2.2.3 强制函数和可选函数 44
2.2.4 哪里是构造函数 44
2.3.1 保护成员 45
2.3.2 保护成员函数 47
2.3.3 公共数据成员 47
2.3.4 强制虚拟函数 48
2.3.5 非虚拟函数 51
2.3.6 短小的例程 54
2.3.7 可选函数 55
2.4 代码 61
2.5 小结 74
第三章 PC8250类 75
3.1 8250 UART 75
3.1.1 8250寄存器集 76
3.1.2 8250的兼容芯片 85
3.1.3 8250设计的扩展 87
3.1.4 8250的特别之处 87
3.2 标准COM板卡 89
3.2.1 便携机的特点 89
3.2.3 硬件基础 90
3.2.2 PC机的中断方式 90
3.3 PC8250驱动程序结构 91
3.3.1 中断服务例程 92
3.3.2 Isr_data结构 95
3.3.3 ISR程序代码 97
3.3.4 PC8250.CPP 105
3.4 支持类 132
3.4.1 队列软件包 132
3.4.2 中断管理程序软件包 135
3.5 测试程序 142
3.6 小结 144
第四章 共享中断设备 145
4.1 多端口板 145
4.1.1 中断线共享-状态寄存器 146
4.1.2 选择IRQ线和地址 146
4.2 Handler类 147
4.3 Digi Classic板中断处理程序 148
4.3.1 构造函数 149
4.3.2 析构函数 151
4.4.2 变量和常量 152
4.4 CHAPT04.CPP 152
4.4.1 头文件总结 152
4.4.3 加入标准处理程序 153
4.4.4 打开端口和窗口 153
4.4.5 建立并运行程序 154
4.5 MS-DOS下的多任务 155
4.6 小结 156
第五章 智能多端口板 157
5.1 硬件 157
5.1.2 程序控制 158
5.1.1 自由设计 158
5.2 软件接口 159
5.3 Digi International API 160
5.3.1 函数0:初始化端口(BIOS兼容) 161
5.3.2 函数1:输出字符(BIOS兼容) 162
5.3.3 函数2:输入字符(BIOS兼容) 162
5.3.4 函数3:读入线和调制解调器的状态(BIOS兼容) 162
5.3.5 函数4:初始化扩展端口(EBIOS兼容) 163
5.3.8 函数6,子函数1:获得驱动程序信息 164
5.3.7 函数6,子函数0:获得端口名 164
5.3.6 函数5:扩展端口控制(EBIOS兼容) 164
5.3.9 函数6,子函数2:获得板卡信息 165
5.3.10 函数6,子函数0xff:获得驱动程序名 165
5.3.11 函数7:发送中断 166
5.3.12 函数8:改变状态检查 166
5.3.13 函数9:清除端口缓冲区 166
5.3.14 函数0x0A:输入缓冲区记数 167
5.3.15 函数0x0B:去掉端口的握手线 167
5.3.16 函数0x0C:获得端口参数 167
5.3.17 函数0x0D:获得字符就绪标志的指针 168
5.3.18 函数0x0E:写缓冲区 169
5.3.19 函数0x0F:读缓冲区 169
5.3.20 函数0x10:清除RX缓冲区 169
5.3.21 函数0x11:清除TX缓冲区 169
5.3.22 函数0x12:释放TX缓冲区的空间 170
5.3.23 函数0x13:提高端口的握手线 170
5.3.24 函数0x14:查看字符 170
5.3.25 函数0x15:获得RX缓冲区中的空间 170
5.3.28 函数0x1E:设置握手 171
5.3.27 函数0x1C:设置握手水标志 171
5.3.26 函数0x1B:获得缓冲区大小和水位标志 171
5.3.29 函数0x20:打开/关闭BIOS调步 172
5.3.30 函数0xFD:获得缓冲区的记数 172
5.4 INT14驱动程序函数小结 172
5.5 配置智能板 173
5.6 配置端口 175
5.7 实现DigiBoard类 175
5.8 代码 176
5.9 CHAPT05.EXE 190
5.10 小结 191
第六章 BIOS和EBIOS类 192
6.1 BIOS细节 192
6.1.1 函数0:初始化端口(BIOS) 193
6.1.2 函数1:输出字符(BIOS) 193
6.1.3 函数2:输入字符(BIOS) 194
6.1.4 函数3:读入线路和调制解调器状态(BIOS) 194
6.1.5 函数4:扩充的端口初始化(EBIOS) 194
6.1.6 函数5,子函数0:读取调制解调器控制寄存器(EBIOS) 195
6.1.7 函数5,子函数1:写入调制解调器控制寄存器(EBIOS) 195
6.3 代码 196
6.2 问题 196
6.4 继承性 197
6.5 测试BIOS类 211
6.6 小结 213
第7章 FOSSIL接口 214
7.1 历史 214
7.2 FOSSIL技术要求说明 215
7.2.1 函数0:初始化端口(BIOS) 215
7.2.4 函数3:读取状态寄存器(BIOS) 216
7.2.3 函数2:获取接收的字符(BIOS) 216
7.2.2 函数1:传送单一字节(BIOS) 216
7.2.5 函数4:打开串口 217
7.2.6 函数5:关闭端口 217
7.2.7 函数6:控制DTR 217
7.2.8 函数8:刷新TX缓冲区 218
7.2.9 函数9:清除输入缓冲区 218
7.2.10 函数0x0A:清除输出缓冲区 218
7.2.11 函数0x0B:立即发送 218
7.2.14 函数0x18:读取缓冲区 219
7.2.13 函数0x0F:选择流控制 219
7.2.12 函数0x0C:查看单字符 219
7.2.15 函数0x19:写入缓冲区 220
7.2.16 函数0x1A:中断控制 220
7.2.17 函数0x1B:获取FOSSIL驱动程序信息 220
7.3 信号源 221
7.4 源代码 221
7.5 编译CHAPT07.EXE 231
7.6 测试运行 232
7.7 小结 233
8.2 为什么要仿真终端 234
第八章 终端仿真 234
8.1 如何创建测试程序 234
8.3 转义序列 235
8.3.1 终端智能 235
8.3.2 转义序列的发展 235
8.4 ANSI.SYS 236
8.4.1 ANSI.SYS转义序列 236
8.4.2 ANSI.SYS键盘序列 240
8.5 终端类 241
8.6 测试程序 243
8.7 AnsiTerminal类 244
8.8 调试挂钩 258
8.9 BaseWindow类 260
8.10 TextWindow类 264
8.11 生成测试程序 278
8.12 小结 279
第九章 Win16驱动程序 280
9.1 Windows编程 280
9.3 通信API 281
9.2 Microsoft Windows 16位设备驱动程序 281
9.4 综合应用 288
9.5 Win16测试程序 304
9.6 生成Test232W.EXE 309
9.7 小结 311
第十章 Win32通信API 312
10.1 Win32编程的不同之处 312
10.1.1 作为文件对象的通信端口 312
10.1.2 产生必要的线程 312
10.2.1 数据结构 313
10.2 Win32设备驱动程序 313
10.2.2 通信API 319
10.3 小结 334
第十一章 Win32Port类 335
11.1 Win32Port类 335
11.1.1 MTTTY.C——按实例进行存档 335
11.1.2 线程结构和约定 336
11.1.3 输出线程 337
11.1.4 输入线程 341
11.1.5 通知 345
11.1.6 类成员概述 346
11.1.7 辅助类——MTDeque 359
11.1.8 辅助类——Dcb 360
11.2 Win32下的IdleFunction 361
11.3 小结 362
第十二章Win32Test程序 363
12.1 CHAPT12.EXE——基于控制台的测试程序 363
12.1.1 基于对话框的控制面板 363
12.1.2 定制的派生类 368
12.2 源代码 369
12.3 小结 409
第十三章Win32终端仿真 410
13.1 终端窗口类 410
13.1.1 需求 410
13.1.2 C++与Windows 411
13.1.3 Win32Term类——基本的内部函数 413
13.2 Win32类——定义 415
13.2.1 私有类 415
13.2.2 数据成员 415
13.2.3 公共代码成员 420
13.2.4 保护代码成员 423
13.3 集成Win32Term与AnsiTerm 425
13.3.1 AnsiWinTerm类 426
13.3.2 AnsiWinTerm和Win32Port类 426
13.2.3 AnsiWinTerm RX通知 427
13.2.4 AnsiWinTerm和AnsiTerm类 428
13.2.5 AnsiWinTerm清单 429
13.4 本章演示程序 436
13.4.1 菜单命令 436
13.4.2 源代码 438
13.5 改进建议 446
13.6 小结 464
第十四章 在MS-DOS下使用调制解调器 465
14.1 调制解调器标准的冲突 465
14.1.1 硬件标准 465
14.1.2 软件标准 466
14.1.3 今天的调制解调器 471
14.2 调制解调器的功能 472
14.2.1 创建功能项 474
14.2.2 Modem类 474
14.2.3 公共接口 476
14.2.4 保护成员 478
14.3 测试程序 485
14.4 生成TSTMODEM.CPP 488
14.5 小结 489
第十五章 在Win32下使用调制解调器——TAPI 490
15.1 TAPI的历史 490
15.2 TAPI概述 491
15.2.1 TAPI通知方法 491
15.2.2 同步与异步函数 491
15.3 本章使用的TAPI函数 492
15.2.3 TAPI对象 492
15.2.4 TAPI的麻烦之处 492
15.3.1 TAPI初始化和关闭 493
15.3.2 线路控制 494
15.3.3 呼叫配置 497
15.3.4 呼叫控制 499
15.3.5 回调函数 502
15.4 SimpleTapi类 503
15.4.1 类管理和状态 503
15.4.2 呼叫及线路管理/配置 504
15.4.3 通知函数 506
15.4.4 重要的内部函数 507
15.4.5 调试的注意事项 508
15.4.6 改进缺点 509
15.4.7 类Tapi32Port——最后的细节 509
15.5 CHAPT15.EXE演示程序 509
15.5.1 SimpleTapi集成 510
15.5.2 源代码 511
15.6 小结 550
16.1 协议的历史 552
第十六章 文件传输与ZMODEM 552
16.1.1 进入ZMODEM 553
16.1.2 选择ZMODEM的原因 553
16.2 ZMODEM概述 554
16.2.1 ZMODEM帧类型 554
16.2.2 头格式 558
16.2.3 数据子包格式 559
16.2.4 编码 560
16.2.5 其他事项 560
16.3 文件传输 561
16.4 FileTransfer类 562
16.5 Zmodem类 563
16.6 测试程序 564
16.7 CRC类 566
16.8 源代码 568
16.9 小结 594
附录 本书光盘内容 595
词汇表 599
本书光盘安装指导 604