Changes

Jump to: navigation, search

PlayCity

80 bytes added, 13:53, 9 July 2014
The Z84C30 has four independently programmable counter/timer channels witch interface directly with the Z80 CPU. The first thing
to consider is how those channels are linked to the CTC-AY board.
====Channel 0 ($F880)====
The channel 0 is exclusively used to generate the frequency of the two embedded soundchips (YMZ294). The input for the trigger
(TRG0) is the 4 MHz system clock of the CPC. The output signal (ZC/TO0) is sent to the clock pins of the soundchips.
====Channel 1 ($F881)====
The channel 1 is typically used to generate raster interrupts. The input (TRG1) is linked to the CRTC CURSOR signal. The output
(ZC/TO1) is connected to the NMI pin of the Z80.
 
Used as a counter, it's synchronized with the CRTC CURSOR signal, generating a smooth high priority rasters interrupt. Used as a
timer (prescaler set to 256), it's 15.625 kHz signal is scanline-synchronized. That means the time constant is the number of
scanlines to wait before to send an NMI.
====Channel 2/3 ($F882/$F883)====
The channels 2 and 3 are dedicated to general purpose usages. Yes, it's for you! The input for the trigger (TRG2) is the 4 MHz
system clock. The output (ZC/TO0) is linked to the trigger for the channel 3 (TRG3). They can be used as 2x 8-bit or 1x 16-bit
automaticaly reloads its time constant and resume counting. Interrupt processing is simplified because only one vector need to be
specified; the CTC internally generates an unique vector for each channel.
 
Before programming the CTC channels, you need to set the lower byte for the vectorized interrupts.
====Vector interrupts====<pre>; Set Vector lower byte to 0LD BC,$F880OUT (C),0</pre>
123
edits