Ports 40H-43H control the PC timer circuits. There are three timer
0) Channel 0 is used as a general system timer. It handles the periodic
"timer-tick". It is initialized by the BIOS to invoke INT 08H
(IRQ 0) 18.206 times per second (once every 54.936 milliseconds).
1) Channel 1 is used in a dedicated manner to support the memory refresh
function. The output is used to generate a direct-memory access
(DMA) cycle request on DMA channel 0. This DMA channel is used to
refresh the systems RAM by performing a dummy memory-read every so
often (once every 15 microseconds on the original PC).
This is critical to system operation, so we are usually advised to
keep "hands off". However, I have seen experiments in which this
timer was slowed down a bit in order to increase overall system
performance by a few percent. Too slow of a value eventually causes
2) Channel 2 is used to drive the audio speaker on the system board (it
originally handled cassette-tape I/O, but that is surely moot). The
output of channel 2 can be directed to control the speaker via I/O
Channel 2 is available for application-controlled timing tasks;
however, it is a global resource. Rather than using direct port I/O
40H Read/Write: Count value for counter 0
Port 43H bits 4-5 control the way the counter is set.
41H Read/Write: Count value for counter 1
41H Read/Write: Count value for counter 2
43H Write: set channel's mode of operation
0: 01H 0=process count as binary
1-3: 0eH select timer mode:
000 = mode 0: interrupt on terminal count
001 = mode 1: programmable one-shot
x10 = mode 2: rate generator
x11 = mode 3: square-wave rate generator
100 = mode 4: software-triggered strobe
101 = mode 5: hardware-triggered strobe
4-5: 30H select read/load sequence:
00 = latch counter for stable read
01 = read/load most significant byte only
10 = read/load least significant byte only
11 = read/load LSB then MSB
6-7: c0H specify counter to affect:
00 = counter 0, 01= counter 1
10 = counter 2, 11= counter 3