The feature that stands out to me (as, I really like it) is the address decoding. You're decoding to just the number of addresses the devices need, and there's no "ghosting". It's also locked down, so no possibility for confusion in configuration jumpers etc, and you've used a base address that's rarely used in homebrew devices. Is there any particular reason why you did the skip over 0x84-0x87?
I notice you're clocking the both of the two "upper" CTC channels from the CPU clock. Did you consider clocking channel three (CLK/TRG3) from the output of channel two (ZC/TO2)? With those two cascaded, a fairly long time period can be accurately counted (in the area of 2 seconds, if my napkin-calculation is correct). Not cascading them does of course give two independent precision general purpose counter/timers, so there are advantages to both approaches :)