BIOS 中断描述(4)
7. 中断服务: 16H 键盘 I/O 服务
7.1 服务号:0 键盘读取
返回键盘缓冲区中的下一个字符; 如果没有可用的字符,则此服务会一直等待,直到有可用的字符。
- 输入:
- AH = 00h
- 输出:
- AL = ASCII字符代码
- AH = 扫描代码
扫描码是代表键盘上按键位置的数字。 随着新键的添加和键盘布局的重新排列,这种编号方案与其最初的目的不一致。
如果字符是特殊字符,则 AL 为 0,AH 中的值将是键的扩展扫描码。
使用扫描代码来区分代表相同 ASCII 代码的键,例如键盘顶部的加号键和灰色的加号键。
从键盘缓冲区中删除字符后,键盘缓冲区开始指针(在 0:041Ah)增加2。如果开始指针超出缓冲区的末尾,则开始指针重置为键盘的开头缓冲。
如果键盘上没有可用字符,则AT、XT-286 和 PC Convertible 为键盘发出INT 15h、服务 90h(设备忙),通知操作系统发生了键盘循环,从而 允许操作系统执行另一个任务。
键入每个字符后,AT、XT-286 和 PC Convertible 发出 INT 15h、服务91h(中断完成)。这允许操作系统切换回在键盘上等待字符的任务。
有关支持增强型(101/102 键)键盘的等效服务,请参阅服务 10h。
7.2 服务号:1 键盘状态
检查缓冲区中是否有可用的字符。
- 输入:
- AH = 01h
- 输出:
- ZF = 0, 如果字符可用
1, 如果字符不可用 - AL = ASCII 字符代码(如果字符可用)
- AH = 扫描码(如果有字符)
- ZF = 0, 如果字符可用
如果字符可用,则清除零标志并且 AX 包含 AL 中的 ASCII 值和 AH 中的扫描码。 字符不会从缓冲区中删除。 使用 Service 00h 从缓冲区中删除字符。 如果字符可用,请参阅服务 00h 以获得 AX 含义的完整描述。
该服务非常适合清除键盘或允许程序被特定键序列中断。
有关支持增强型(101/102 键)键盘的等效服务,请参阅服务 11h。
7.3 服务号:2 获取Shift状态
返回当前键盘Shift状态。
- 输入:
- AH = 02h
- 输出:
- AL = Shift status
Shift Status (AL)
7 6 5 4 3 2 1 0
1 . . . . . . . Insert locked
. 1 . . . . . . Caps Lock locked
. . 1 . . . . . Num Lock locked
. . . 1 . . . . Scroll Lock locked
. . . . 1 . . . Alt key is pressed
. . . . . 1 . . Ctrl key is pressed
. . . . . . 1 . Left Shift key is pressed
. . . . . . . 1 Right Shift key is pressed
该Shift状态字节是从存储器位置 0:0417h 处的字节获得的。
请参阅服务 12h 以获取增强型(101/102 键)键盘的移位状态。
7.4 服务号:3 设置打字速度
设置键盘的打字速度和延迟。
- 输入:
- AH = 03h
- AL = 子服务
0 : 返回默认键盘状态
1 : 增加初始延迟
2 : 打字速度减慢 1/2
3 : 执行子服务 1 和 2
4 : 关闭打字字符
5 : 设置打字速度和延迟
BL = 打字速度(见下文)
BH = 延迟值(见下文)
- 输出:无
每秒字符数 (BL) 的打字速度
BL | 速度 |
---|---|
00h | 30.0 |
01h | 26.7 |
02h | 24.0 |
03h | 21.8 |
04h | 20.0 |
05h | 18.5 |
06h | 17.1 |
07h | 16.0 |
08h | 15.0 |
09h | 13.3 |
0ah | 12.0 |
0bh | 10.9 |
0ch | 10.0 |
0dh | 9.2 |
0eh | 8.6 |
0fh | 8.0 |
10h | 7.5 |
11h | 6.7 |
12h | 6.0 |
13h | 5.5 |
14h | 5.0 |
15h | 4.6 |
16h | 4.3 |
17h | 4.0 |
18h | 3.7 |
19h | 3.3 |
1ah | 3.0 |
1bh | 2.7 |
1ch | 2.5 |
1dh | 2.3 |
1eh | 2.1 |
1fh | 2.0 |
以毫秒为单位的延迟值 (BH)
BH | 延迟 |
---|---|
0 | 250 |
1 | 500 |
2 | 750 |
3 | 1000 |
子服务 0 到 4 仅适用于 PCjr。 子服务 5 仅适用于日期为 11/15/85 及之后的 AT,以及 XT-286。
子服务 0(返回默认键盘状态)将键盘恢复到其原始状态。 开机时的原始状态是打字打开、正常初始延迟和正常打字速率。
子服务 1(增加初始延迟)增加了输入的第一个字符和输入字符的突发之间的延迟。
对于子服务 0 到 4,每次更改打字速度时,都会删除所有先前的状态。 例如,如果您想增加打字延迟并且当前正在减慢速度,请使用子服务 3(执行子服务 1 和 2)而不是单独使用子服务 1(增加初始延迟)。
7.5 服务号:4 调整键盘点击
开启或关闭键盘点击。
- 输入:
- AH = 04h
- AL = 0 : 关闭键盘点击
1 : 打开键盘点击
- 输出: 无
此服务仅在 PCjr 和 PC Convertible 上可用。
7.6 服务号:5 键盘写入
将扫描代码/字符代码组合放入键盘缓冲区。
- 输入:
- AH = 05h
- CH = 扫描代码
- CL = ASCII字符代码
- 输出:
- AL = 00h : 操作成功
01 : 缓冲区已满
- AL = 00h : 操作成功
此服务仅适用于日期为 85 年 11 月 15 日及之后的 AT 和 XT 286。
该服务“欺骗”程序认为键来自键盘。 一个很好的例子是实现键盘宏的程序所需的操作。
有关扫描码的说明和列表,请参阅“扫描码”。
7.7 服务号:16 扩展键盘读取
返回键盘缓冲区中的下一个字符; 如果没有可用的字符,则此服务会一直等待,直到有可用的字符。 提供此服务是为了支持增强型(101/102 键)键盘。
- 输入:
- AH = 10h
- 输出:
- AL = ASCII字符代码
- AH = 扫描代码
此服务仅在 85 年 11 月 15 日及之后的 AT、86 年 1 月 10 日及之后的 PC XT 和 XT-286 上受支持。
扫描码是代表键盘上按键位置的数字。 随着新键的添加和键盘布局的重新排列,这种编号方案与其最初的目的不一致。 查看扫描码列表。
如果字符是特殊字符,AL 将为 0,AH 中的值将是键的扩展扫描码。 查看扫描码列表。
使用扫描代码来区分代表相同 ASCII 代码的键,例如键盘顶部的加号键和灰色的加号键。
从键盘缓冲区中删除字符后,键盘缓冲区开始指针(在 0:041Ah)增加 2。如果开始指针超出缓冲区的末尾,则开始指针重置为键盘的开头 缓冲。
如果键盘上没有可用的字符,将为键盘发出一个 INT 15h,服务 90h(设备忙),通知操作系统发生了键盘循环,从而允许操作系统执行另一个任务。
键入每个字符后,发出一个 INT 15h,Service 91h(中断完成)。 这允许操作系统切换回在键盘上等待字符的任务。
有关适用于所有键盘的等效服务,请参阅服务 00h,但不支持增强型(101/102 键)键盘上的新键。
7.8 服务号:17 扩展键盘状态
检查缓冲区中是否有可用的字符。 提供此服务是为了支持扩展键盘(101/102 键键盘)。
- 输入:
- AH = 11h
- 输出:
- ZF = 0, 如果字符可用
1, 如果字符不可用 - AX = 如果字符可用,则设置为在服务 10h 中的字符
- ZF = 0, 如果字符可用
仅在 85 年 11 月 15 日及之后的 AT、86 年 1 月 10 日及之后的 XT 和 XT-286 支持此服务。
如果字符可用,则清除零标志并且 AX 包含 AL 中的 ASCII 值和 AH 中的扫描码。 字符不会从缓冲区中删除。 使用 服务 10h 从缓冲区中删除字符。 如果字符可用,请参阅服务 10h 以获得 AX 含义的完整描述。
该服务非常适合清除键盘或允许程序被特定键序列中断。
有关适用于所有键盘的等效服务,请参阅服务 01h,但不支持增强型(101/102 键)键盘上的新键。
7.9 服务号:18 获取扩展键盘状态
返回当前键盘Shift状态。 提供此服务是为了支持增强型(101/102 键)键盘。
-
输入:
AH = 12h -
输出:
AL = Shift status
AH = Extended shift status
Shift Status (AL)
7 6 5 4 3 2 1 0
1 . . . . . . . Insert locked
. 1 . . . . . . Caps Lock locked
. . 1 . . . . . Num Lock locked
. . . 1 . . . . Scroll Lock locked
. . . . 1 . . . Alt key is pressed
. . . . . 1 . . Ctrl key is pressed
. . . . . . 1 . Left Shift key is pressed
. . . . . . . 1 Right Shift key is pressed
Extended Shift Status (AH)
7 6 5 4 3 2 1 0
1 . . . . . . . Sys Req key is pressed
. 1 . . . . . . Caps Lock key is pressed
. . 1 . . . . . Num Lock key is pressed
. . . 1 . . . . Scroll Lock key is pressed
. . . . 1 . . . Right Alt key is pressed
. . . . . 1 . . Right Ctrl key is is pressed
. . . . . . 1 . Left Alt key is pressed
. . . . . . . 1 Left Ctrl key is pressed
仅在 85 年 11 月 15 日及之后的 AT、86 年 1 月 10 日及之后的 XT 和 XT-286 支持此服务。
AL 中的移位状态字节返回是从内存位置 0:0417h 处的字节获得的。 请注意,这与 Service 02h 返回的值相同。
请注意,Extended Shift Status(AH 中返回的值)报告是否正在按下键,而不是锁定。
有关适用于所有键盘的等效服务,请参阅服务 02h,但不支持增强型(101/102 键)键盘上的新键。
8. 中断服务: 17H 打印机 I/O 服务
8.1 服务号:0 向打印机发送一个字节
向指定的并行打印机发送一个字符并返回打印机的当前状态。
-
输入:
- AH = 00h
- AL = 要打印的字符
- DX = 并行打印机编号(0 - LPT1、1 - LPT2 等)
-
输出:
- AH = 打印机状态(见服务 02h)
对于 AT、XT-286 和 PC Convertible,INT 15h、服务 90h(设备忙)在打印机忙时调用。 这会通知操作系统将开始一个超时循环。
8.2 服务号:1 初始化打印机
将初始化控制代码发送到指定的并行打印机并返回打印机的当前状态。
- 输入:
- AH = 01h
- DX = 并行打印机编号(0 - LPT1、1 - LPT2 等)
- 输出:
- AH = 打印机状态(见服务 02h)
该服务将十六进制值 08h 和 0Ch 发送到打印机的控制端口,从而初始化打印机。
8.3 服务号:2 获取打印机状态
返回有关指定并行打印机的状态信息。
- 输入:
- AH = 02h
- DX = 并行打印机编号(0 - LPT1、1 - LPT2 等)
- 输出:
- AH = 打印机状态
打印机状态 (AH)
7 6 5 4 3 2 1 0
x . . . . . . . 打印机不忙(0=忙)
. x . . . . . . 打印机确认
. . x . . . . . 没纸了
. . . x . . . . 已选择打印机
. . . . x . . . I/O 错误
. . . . . 0 0 . 未使用
. . . . . . . x 超时错误
9. 中断服务: 18H Basic加载程序服务
激活 Cassette BASIC。
该服务将控制权转移到 F600:0,它是标准 BASIC 解释器在 ROM 中的位置。 此中断仅适用于 IBM 计算机。 兼容的 ROM 中没有 BASIC,但必须运行基于磁盘的 BASIC 版本,通常称为 GW-BASIC。
如果开机自检 (POST) 无法从软盘或固定磁盘读取操作系统,则会执行此中断。
10. 中断服务: 19H 引导加载程序服务
尝试在 0:7C00h 将软盘或固定磁盘的磁头 0、柱面 0、扇区 1 的扇区加载到内存中,并在那里转移控制权。 这个扇区通常有一个操作系统引导加载程序。
此中断尝试在 0:7C00h 将第一张软盘上的磁头 0、磁道 0、扇区 1 加载到内存中。 如果无法加载,则尝试加载第一个硬盘的磁头 0、磁道 0、扇区 1 的扇区。 如果它无法从软盘或固定磁盘加载,它调用 INT 18h,它调用 ROM BASIC。
如果 INT 19h 成功,则控制转移到扇区的第一个字节,该字节已在内存位置 0:7C00h 处读入。 即,CS 设置为 0,IP 设置为 7C00h。
此中断不能替代 Ctrl-Alt-Del 热启动。 此中断是开机自检 (POST) 执行的最后一个操作,由 Ctrl-Alt-Del 激活。 如果用户程序尝试直接执行此中断,则机器可能会锁定。
要在应用程序中正确重启,请跳转到内存中的 FFFF:0h。 也就是将CS设置为FFFF,IP设置为0。这和机器第一次上电时的过程是一样的。 按照这些步骤将执行“冷”启动。 要使用此方法执行“热”启动,首先将位置 0:472h 处的字设置为 1234h。 这将模拟 Ctrl-Alt-Del 的按下。
冷启动会初始化所有硬件,测试所有硬件,测试 RAM,然后调用 INT 19h 来加载引导加载程序。 此过程在计算机开机或按下硬件重置按钮时执行。
热启动初始化并测试所有硬件,但不测试 RAM。 然后它调用 INT 19h 来加载引导加载程序。 此过程在键入 Ctrl-Alt-Del 时执行。
从软盘读取的扇区将依次在操作系统的其余部分中读取。硬盘将读取分区表,然后将读取正确的操作系统。
11. 中断服务: 1AH 系统定时器和时钟服务
11.1 服务号:0 读取系统定时器时间计数器
报告当前时间,以及自 1) 上次开机、2) 上次系统重置或 3) 上次读取或设置系统计时器时间后是否已过去 24 小时。
- 输入:
- AH = 00h
- 输出:
- CX = 时钟计数的高位部分
- DX = 时钟计数的低位部分
- AL = 如果 24 小时未过去,则为 0; 否则 1
以下公式将时钟计数转换为一天中的时间:
Hour = Clock / 65543 (1007h)
Remainder = Clock MOD 65543
Minutes = Remainder / 1092 (444h)
Remainder = Remainder MOD 1092
Second = Remainder / 18.21
Remainder = Remainder MOD 18.21
Hundredths = CINT(Remainder * 100)
“系统定时器”(区别于实时时钟)是在系统启动时设置的定时器。 此时间是暂时的,仅在系统开启时持续。
时钟计数也可以在内存位置 0:046C 处读取为 4 字节整数。 此 4 字节值等于调用服务 00h 后 CX:DX 中的 4 字节整数。
调用结束后,指示是否已过 24 小时的标志(在 0:0470h)被清除。
当在命令行输入 TIME 时,DOS 通过这个服务获取时间。
计数以每秒 18.2 的速率发生。
11.2 服务号:1 设置系统定时器时间计数器
设置当前时间。
- 输入:
- AH = 01h
- CX = 时钟计数的高位部分
- DX = 时钟计数的低位部分
- 输出: 无
以下公式将一天中的时间转换为时钟计数:
Count = (Hout * 65543.33) + (Minutes * 1092.38) + (Seconds * 18.21) + (Hundreths * .182)
“系统定时器”(区别于实时时钟)是在系统启动时设置的定时器。 此时间是暂时的,仅在系统开启时持续。
时钟计数也可以在内存位置 0:046C 处设置为 4 字节整数。 该 4 字节值将在调用后设置为 CX:DX 中的 4 字节整数。
设置后,指示是否已过 24 小时的标志(在 0:0470h)被清除。
当在命令行输入 TIME 时,DOS 通过这个服务获取时间。 设置新时间将调用此服务。
计数以每秒 18.2 的速率发生。
11.3 服务号:2 读取实时时钟时间
从计算机的实时时钟中读取时间。
- 输入:
- AH = 02h
- 输出:
- CF = 如果时钟不运行则设置; 其他声明
- CH = 时 (BCD)
- CL = 分 (BCD)
- DH = 秒 (BCD)
- DL = 1 如果夏令时选项; 否则 0
所有时间均采用二进制编码十进制 (BCD)。 例如,上午 9:04.12 将报告为 CX = 0904; DH = 12。
实时时钟是即使在计算机关闭时也会运行的时钟。 使用 CMOS 电池,即使在计算机关闭时,日期、时间和闹钟时间也会保持不变。
此服务仅适用于 AT、XT-286 和 PC Convertibles。 以前的机器会报告不可预知的结果(包括进位标志的状态)。
日期早于 85 年 6 月 10 日的 AT 不报告夏令时选项。
此服务返回的信息可能与系统时间不同。 这是因为实时时钟在系统启动时被读取一次,更新系统定时器。 所有其他对时间的引用都使用系统计时器。 如果实时时钟更改(通过服务 03h)或系统定时器更改(通过服务 01h),则其他时钟不会相应更改。
即使系统使用系统计时器来获取计时信息,实时时钟和系统计时器也会不断更新。
11.4 服务号:3 设置实时时钟时间
设置计算机实时时钟的时间。
- 输入:
- AH = 03h
- CH = 时 (BCD)
- CL = 分 (BCD)
- DH = 秒 (BCD)
- DL = 1 如果夏令时选项; 否则 0
- 输出: 无
所有时间均采用二进制编码十进制 (BCD)。 例如,上午 9:04.12 将设置为 CX = 0904; DH = 12。
实时时钟是即使在计算机关闭时也会运行的时钟。 使用 CMOS 电池,即使在计算机关闭时,日期、时间和闹钟时间也会保持不变。
此服务仅适用于 AT、XT-286 和 PC Convertibles。 以前的机器会报告不可预知的结果(包括进位标志的状态)。
设置实时时钟不会影响系统时间。 这是因为实时时钟在系统启动时被读取一次,更新系统定时器。 所有其他对时间的引用都使用系统计时器。 如果实时时钟更改(通过此服务)或系统定时器更改(通过服务 01h),则其他时钟不会相应更改。
即使系统使用系统计时器来获取计时信息,实时时钟和系统计时器也会不断更新。
11.5 服务号:4 读取实时时钟日期
从计算机的实时时钟中读取日期。
- 输入:
- AH = 04h
- 输出:
- CF = 如果时钟不运行则设置; 否则清除
- CH = 世纪 (19 or 20) (BCD)
- CL = 年 (BCD)
- DH = 月 (BCD)
- DL = 日 (BCD)
所有日期均采用二进制编码十进制 (BCD)。 例如,1987 年 11 月 15 日将报告为 CX = 1987; DX = 1115。
实时时钟是即使在计算机关闭时也会运行的时钟。 使用 CMOS 电池,即使在计算机关闭时,日期、时间和闹钟时间也会保持不变。
此服务仅适用于 AT、XT-286 和 PC Convertibles。 以前的机器会报告不可预知的结果(包括进位标志的状态)。
此服务返回的信息可能与系统日期不同。 这是因为实时时钟在系统启动时被读取一次,更新系统定时器。 所有其他对日期的引用都使用系统计时器。 如果实时时钟日期更改(通过服务 05h)或系统计时器更改(通过服务 01h),则其他日期不会相应更改。
即使系统使用系统计时器来获取日期信息,实时时钟和系统计时器也会不断更新。
11.6 服务号:5 设置实时时钟日期
在计算机的实时时钟上设置日期。
- 输入:
- AH = 05h
- CH = 世纪 (19 or 20) (BCD)
- CL = 年 (BCD)
- DH = 月 (BCD)
- DL = 日 (BCD)
- 输出: 无
所有日期均采用二进制编码十进制 (BCD)。 例如,1987 年 11 月 15 日将报告为 CX = 1987; DX = 1115。
实时时钟是即使在计算机关闭时也会运行的时钟。 使用 CMOS 电池,即使在计算机关闭时,日期、时间和闹钟时间也会保持不变。
此服务仅适用于 AT、XT-286 和 PC Convertibles。 以前的机器会报告不可预知的结果(包括进位标志的状态)。
此服务返回的信息可能与系统日期不同。 这是因为实时时钟在系统启动时被读取一次,更新系统定时器。 所有其他对日期的引用都使用系统计时器。 如果实时时钟日期更改(通过服务 05h)或系统计时器更改(通过服务 01h),则其他日期不会相应更改。
即使系统使用系统计时器来获取日期信息,实时时钟和系统计时器也会不断更新。
11.7 服务号:6 设置实时时钟闹钟
通过调用 INT 4Ah 设置计算机发出警报的时间。
- 输入:
- AH = 06h
- CH = 时 (BCD)
- CL = 分 (BCD)
- DH = 秒 (BCD)
- 输出:
- CF = 如果时钟未运行或警报已设置,则设置; 否则清除
所有日期均采用二进制编码十进制 (BCD)。 例如,1985 年 6 月 1 日将设置为 CX = 1985; DX = 0601。
实时时钟是即使在计算机关闭时也会运行的时钟。 使用 CMOS 电池,即使在计算机关闭时,日期、时间和闹钟时间也会保持不变。
此服务仅适用于 AT、XT-286 和 PC Convertibles。 以前的机器会报告不可预知的结果(包括进位标志的状态)。
执行此服务后,只要指定的小时、分钟和秒与实时时钟日期的时间匹配,就会生成一个 INT 4Ah。 在调用此服务之前,由程序员为 INT 4Ah 安装中断处理程序
警报中断 (INT 4Ah) 将在指定时间每 24 小时继续发生一次,直到通过服务 07h(重置实时时钟警报)将其重置。 一次只能激活一个告警时间。
因为即使关闭了实时时钟也会更新,因此通过此服务设置的闹钟时间即使在关闭计算机后也将保持有效(当然,在关闭计算机时不会产生警报) .
设置实时时钟日期不会影响系统日期。 这是因为实时时钟在系统启动时被读取一次,更新系统定时器。 所有其他对日期的引用都使用系统计时器。 如果实时时钟日期更改(通过服务 05h)或系统计时器更改(通过服务 01h),则其他日期不会相应更改。
即使系统使用系统计时器获取日期信息,实时时钟和系统计时器也会不断更新。
11.8 服务号:7 重置实时时钟警报
防止发生实时时钟警报。
- 输入:
- AH = 07h
- 输出:无
此服务禁用警报进程。 它通过在任何时候都不执行 INT 4Ah 来实现。 请参阅服务 06h(设置实时时钟警报)以设置警报。
实时时钟是即使在计算机关闭时也会运行的时钟。 使用 CMOS 电池,即使在计算机关闭时,日期、时间和闹钟时间也会保持不变。
此服务仅适用于 AT、XT-286 和 PC Convertibles。 以前的机器会报告不可预知的结果(包括进位标志的状态)。
11.9 服务号:8 设置时钟激活的开机模式
通过调用 INT 4Ah 设置计算机发出警报的时间。
- 输入:
- AH = 08h
- CH = 时 (BCD)
- CL = 分 (BCD)
- DH = 秒 (BCD)
- 输出:
- CF = 如果时钟未运行或警报已设置,则设置; 否则清除
此服务仅适用于 PC Convertible。 以前的机器会报告不可预知的结果(包括进位标志的状态)。 AT、XT-286 和 PS/2 系列将设置进位标志,从而报告错误状态。
所有日期均采用二进制编码十进制 (BCD)。 例如,1985 年 6 月 1 日将设置为 CX = 1985; DX = 0601。
实时时钟是即使在计算机关闭时也会运行的时钟。 使用 CMOS 电池,即使在计算机关闭时,日期、时间和闹钟时间也会保持不变。
执行此服务后,只要指定的时、分、秒与实时时钟日期的时间一致,机器就会自动开机。 如果系统已开启,则将执行 INT 4Ah(用户警报)。
如果系统开启,则警报中断 (INT 4Ah) 将在指定时间每 24 小时继续发生一次,直到通过服务 07h(重置实时时钟警报)将其重置。 一次只能激活一个告警时间。
11.10 服务号:9 读取时钟闹钟时间和状态
从实时时钟读取闹钟时间和状态。
- 输入:
- AH = 09h
- 输出:
- CF = 如果时钟不运行则设置; 否则清除
- CH = 时 (BCD)
- CL = 分 (BCD)
- DH = 秒 (BCD)
- DL = 报警状态
00h : 警报未启用
01h :警报启用但不会启动系统
02h : 启用警报并将启动系统
请注意,所有日期均采用二进制编码十进制 (BCD)。 例如,1985 年 6 月 1 日将设置为 CX = 1985; DX = 0601。
实时时钟是即使在计算机关闭时也会运行的时钟。 使用 CMOS 电池,即使在计算机关闭时,日期、时间和闹钟时间也会保持不变。
此服务仅适用于 PC Convertible。 AT 和 XT-286 将设置进位标志,从而报告错误状态。 以前的机器会报告不可预知的结果(包括进位标志的状态)。
11.11 服务号:10 读取系统定时器日计数器
从系统计时器返回自 1980 年 1 月 1 日以来的天数。
- 输入:
- AH = 0ah
- 输出:
- CF = 如果错误则设置; 否则清除
- CX = 自 1980 年 1 月 1 日以来的天数
系统定时器是系统启动时设置的定时器。 此日期是临时的,仅在系统打开时持续。
此服务仅适用于 86 年 1 月 10 日及之后的 XT。 AT 和 XT-286 将设置进位标志,从而报告错误状态。 以前的机器会报告不可预知的结果(包括进位标志的状态)。
11.12 服务号:11 设置系统定时器日计数器
为 System-Timer 设置自 1980 年 1 月 1 日以来的天数。
- 输入:
- AH = 0bh
- 输出:
- CF = 如果错误则设置; 否则清除
系统定时器是系统启动时设置的定时器。 此日期是临时的,仅在系统打开时持续。
此服务仅适用于 86 年 1 月 10 日及之后的 XT。 AT 和 XT-286 将设置进位标志,从而报告错误状态。 以前的机器会报告不可预知的结果(包括进位标志的状态)。
11.13 服务号:128 设置声音多路复用器
确定用于声音生成的源。
- 输入:
- AH = 80h
- AL = 声源
00h : 8253 通道 2
01h : 卡带输入
02h : I/O 通道上的“音频输入”线
03h : 复杂的声音发生器芯片(TI 76496)
- 输出:
- CF = 如果错误则设置;
此服务仅适用于 PCjr。 ATs、XT-286s 和 PC Convertibles 将设置进位标志,从而报告错误状态。 以前的机器会报告不可预知的结果(包括进位标志的状态)。
通电时,默认声源是 8253 可编程定时器芯片,通过通道 2。
12. 中断服务: 1BH 键盘中断
当遇到 Control-Break 键序列时调用。
当机器开机时,该中断的中断处理程序只是 IRET 回调用者。 然而,DOS 安装了一个 Ctrl-Break 处理程序,该处理程序设置一个内部标志来表示已发生键盘中断条件。
DOS 偶尔会根据 Control-Break Check(INT 21h,Function 33h)的状态测试内部标志的状态。 如果该标志在测试期间打开,则在屏幕上显示字符串“^C”,然后是回车/换行组合,DOS 内部标志被重置,并且 INT 23h(Control-Break Exit 地址)被调用。
请注意,INT 09h(键盘)将字节设置为 0:0471h,以表示已输入 Control-Break 键。
13. 中断服务: 1CH 用户定时器滴答
INT 08h(系统定时器)在每个定时器滴答声(每秒 18.2 次,或每 55 毫秒)调用。
默认情况下,此中断 IRET 的中断处理程序返回给调用者。 用户可以提供他自己的处理程序,这样他就可以在每个计时器滴答声中获得控制权。
请注意,此中断由硬件定时器中断 (INT 08h) 调用,它没有将中断结束的信号返回给中断控制器。 因此,该例程的操作受到限制,因为所有中断都将被禁用。 解决此问题的更好方法是截取 INT 08h。 新的 INT 08h 处理程序将首先调用标准 INT 08h,它将处理上述中断控制器完成信号。 然后在标准 INT 08h 完成后,新处理程序可以在每个计时器滴答时执行它必须执行的任何操作。
14. 中断服务: 4AH 用户报警
当满足实时时钟报警条件时,由实时时钟 (RTC) 中断处理程序调用。
默认情况下,此中断 IRET 的中断处理程序会发送给调用者。 用户可以提供一个处理程序,该处理程序将在当前时间等于警报时间时获得控制权。 在使用 INT 1Ah、Service 06h 设置实时时钟警报之前,请确保已安装此中断处理程序。
此服务仅适用于 AT、XT-286 和 PC Convertible。
AT 和 XT-286 的实时时钟 (RTC) 中断处理程序是 INT 70h。 PC Convertible 使用 INT 08h(系统定时器)。
15. 中断服务: 70H 实时时钟
处理实时时钟的警报和周期性中断。
这是由 CMOS 定时器每秒激活 1024 次的硬件中断 (IRQ 8)。
此中断仅在 AT 和 XT-286 上可用。 PC Convertible 上的实时时钟生成一个 INT 02h(不可屏蔽中断)来处理周期性和报警功能。
该中断提供两种服务。 第一个是指定时间延迟时产生的周期性中断。 有关详细信息,请参阅 INT 15h、服务 83h(事件等待)和服务 86h(等待)。 第二个服务是警报中断。 当 CMOS 报警时间与当前 CMOS 时间匹配时,执行 INT 4Ah(用户报警)。