YM2610 timers
The YM2610 provides 2 timers (called A and B), used to time music playback by triggering Z80 interrupts.
The timer A is 10 bits wide, the timer B is only 8 bits wide.
Ranges
- Timer A: 8M / 2 / 144 (prescaler) / (load value - 1): 27.18Hz ~ 27.8kHz ?
- Timer B: 8M / 16384 / (load value - 1): 1.922Hz ~ 448.3Hz
Registers
Address (Z80 port 4) | Data (Z80 port 5) | ||||||||||||||||||
$24 |
| ||||||||||||||||||
$25 |
| ||||||||||||||||||
$26 |
| ||||||||||||||||||
$27 |
|
Operation
The timers are decremented at regular intervals until they reach 0, at which point an interrupt will be generated (if enabled). The timer which caused the interrupt can be known by reading port $04.
When a timer expires, it is automatically reloaded. If interrupts are enabled, care must be taken to clear the appropriate flag(s) so that they can be triggered again.
The actual counters aren't accessible, only their load value can be written.
- Writing 0 to the load bits in register $27 will reset the timer counters to zero.
- Writing 1 to the load bits will copy the respective timer load value to the timer counter. This only works when the counter is at zero.
- Flag reset refers to the same flags that are read from port $04
- CSM mode is for automatic key-on for operators of the second FM channel when timer A expires ?