I've heard the term tacts when referring to some hardware capability, e.g. "tacts on one frame" or "tacts per second". I tried Googling this but surprisingly did not find anything relevant. What is the meaning of this term when used in the aforementioned contexts?
The word "такт" is routinely used in Russian to denote exactly "clock cycle" in digital electronics.
It always was and still is heavily used in the Russian ZX scene in the same meaning (e.g. counting clock cycles of Z80 CPU, etc.) and sometimes was (and is) leaking to the English texts written by native Russian speakers.
So "tact" could be recognized as a semantic loan from Russian.
According to google translate "такт = time/measure/beat," Sounds like an accurate answer to me! Nov 21, 2017 at 17:26
5It's the same in German: "Takt" is the German expression for "clock cycle". The original meaning of "Takt" is "musical meter/beat", e.g. "3/4 Takt", from Latin tactum. So I doubt it's a calque from Russian, Russian probably also imported it from Latin. Given that English doesn't borrow at lot of words from Russian, but does borrow a lot of musical terms ("Leitmotif") from German, my guess is that the borrowing happened along those lines.– dirktNov 22, 2017 at 7:35
Of course it existed as a word well before 90ies :) But was it ever used in the meaning of "clock cycle" before?– lvdNov 22, 2017 at 7:47
I've just fixed my answer with the new term instead of "calque", which fits better.– lvdNov 22, 2017 at 9:44
1In Romania, tact is coming from French and German where it was used in first in music, then for computers. The origin is from tactus in Latin. So it is used in the same context in many European countries, with the origin in Latin. It's not a semantic loan from Russian. Oct 27, 2022 at 20:05
Clock ticks as seen by the processor - e.g. a NOP instruction takes 4 tacts, or a frame takes 69888 tacts (on a 48K Spectrum). It's a fairly common usage of the term within computing circles (not just the Spectrum), being borrowed from the musical meaning.
15Could this be a British term? I'm an experienced American assembly language programmer, and have never heard of tacts. It sounds like you are describing what I have always heard called "clock cycles".– RichFNov 19, 2017 at 16:50
6Speaking as a British person, I'm not aware of its use in any modern context. It's probably either historical, or possibly descended from Sinclair's particular documentation. Much like Commodore programmers talking about the 'kernal'.– TommyNov 19, 2017 at 17:10
7This term was fairly common in Russian-speaking computing circles in the eighties and nineties. It is obviously a borrowed (not-Russian) word, and I am unsure of the origin.– krokodilNov 19, 2017 at 19:17
4Don't think you could call it fairly common usage within computing circles, Phil. I've heard those called instruction cycles, with clock cycles being the pulses from the crystal oscillator. Never heard of tacts in my time– TonyMNov 19, 2017 at 21:18
6OK, seems like this wasn't as common as I thought it was; looks very much like I picked it up from the Russian scene in the late 90s / early 2000s. I'll edit at some point when I'm not at work ;-) Nov 20, 2017 at 10:05
This term is equivalent for CPU clock period and it is the smallest time chunk in CPU based computer timings. One level higher are the MC machine cycles (each MC is 1 or more tacts depends on MC type and CPU architecture). So if you see something like
10Tthat means it is time duration of
10periods of CPU clock.
This way of timing notation is independent on CPU frequency so you can compute duration of code universally and apply CPU clock on the final time ... It is used mostly for individual instruction timings. Some instructions have 2 times like
8/10Twhich means instruction can run in either
10Tdepending on something (like state of flags, condition, etc).
Here some example instructions timing for Z80:
opc T0 T1 MC1 MC2 MC3 MC4 MC5 MC6 MC7 mnemonic B8 04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,B B9 04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,C BA 04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,D BB 04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,E BC 04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,H BD 04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,L BE 07 00 M1R 4 MRD 3 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,(HL) BF 04 00 M1R 4 ... 0 ... 0 ... 0 ... 0 ... 0 ... 0 CP A,A C0 11 05 M1R 5 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 RET NZ C1 10 00 M1R 4 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 POP BC C2L2H2 10 10 M1R 4 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 JP NZ,U16 C3L1H1 10 00 M1R 4 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 JP U16 C4L2H2 17 10 M1R 4 MRD 3 MRD 4 MWR 3 MWR 3 ... 0 ... 0 CALL NZ,U16 C5 11 00 M1R 5 MWR 3 MWR 3 ... 0 ... 0 ... 0 ... 0 PUSH BC C6U2 07 00 M1R 4 MRD 3 ... 0 ... 0 ... 0 ... 0 ... 0 ADD A,U8 C7 11 00 M1R 5 MWR 3 MWR 3 ... 0 ... 0 ... 0 ... 0 RST 00H C8 11 05 M1R 5 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 RET Z C9 10 00 M1R 4 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 RET CAL2H2 10 10 M1R 4 MRD 3 MRD 3 ... 0 ... 0 ... 0 ... 0 JP Z,U16 opc: operation code [hex] L1,H1,U1,S1 means first operand direct number or address L2,H2,U2,S2 means second operand direct number or address L3,H3,U3,S3 means third operand direct number or address H,L ... U16 high and low byte U ... U8 unsigned byte S ... S8 signed byte T0 normal instruction duration [T] always 2 decimal digits T1 instruction duration if condition not met [T] always 2 decimal digits MC1++ Machine cycle first is type,second is duration [T] always 1 decimal digit ... unused M1R M1 cycle MRD memory read MWR memory write IOR IO read IOW IO write NON no external operation (internal computation) INT interrupt cycle mnem instruction text (mnemonic)
opcis used for the address in an array of pointers
mnemonicis used to select the proper function pointer, and operands type
T1are used for instructions timing (this is enough for rough emulations)
MC1++are used for correct MC timings (to implement correct hardware emulation and contentions timing)
As you can see all the times are in
Tacts per frame
On ZX computers the screen is outputted with 50 Hz frequency triggering interrupt each frame. The time between two interrupts in CPU clock tacts is referred as tacts per frame. This value is defined by model of ZX (type of ULA) and CPU clock frequency. It can be measured and used to determine type of ZX by reading IR register and approximation.
This value is very important as all the stuff your code is doing must fit into it. The frame timing itself is a bit more complicated and can be used to achieve border effects or even multitech techniques.
IIRC here are some actual values:
69888T ZXS 48k 70908T ZXS 128K 80384T Didaktik M,Didaktik Kompakt
2Do you have any official sources which use "tact"? At the moment, it seems this term was somewhat invented by the Russian / Eastern European scene rather than anything else. Nov 21, 2017 at 9:35
1@PhilipKendall Well I am from Eastern Europe (not Russia however) and the term is here a common knowledge (but you might be right as we did not have any official Western docs accessible at that time). Here an example of use in book asm and ZX spectrum. In English speaking community is sometimes therm
ticsused instead.– SpektreNov 21, 2017 at 15:34
2Another common term for the same meaning in "T-states" (which IIRC comes from the official Z80 literature). I've always assumed when I see "T" in documents like the one you quote above that this is what it referred to.– JulesNov 22, 2017 at 9:22
@Jules I just was going to mention "T-states" too. I'd never heard of either "tacts" or "tics". I programmed machine code on a Spectrum in about 1983 when I was 15. I wasn't party of any "scene". I had an American Z80 book and a few British Spectrum programming books in Australia. Apr 22, 2020 at 18:39
@hippietrail I am 100% sure I saw tics in english written stuff but it might have been for x86 platform instead of Z80 ... and not written by English authors ...– SpektreApr 22, 2020 at 20:16
The much more commonly used term for the same thing outside Eastern Europe might be T-State, which is (without the hyphen) used by the original Zilog manuals - Another term is Instruction Cycle, which commonly notes the minimal instruction timing of a Z80, which consists of four T-states.
Takt is also used in German, but here we commonly use it as a synonym for "clock".
A "tact" is surely a foreign word for what in English would be called a "tick" (of a clock).
I know this is an old question now, but I was quite surprised to read down and see English translations and metaphors as a "clock cycle", a "time", a "measure", a "beat", a "musical meter", a "phase", even a "piston stroke"! Oddly there was not even any mention of a "pendulum swing", which is the most obvious mechanical manifestation.
Even @PhilipKendall who came closest, had to say "Clock ticks as seen by the processor", vaguely implying that there may be "clock ticks" other than those seen by the processor, or some other way to see "clock ticks" in this context - in other words suggesting that a "tact" may be different or more specific than "tick" - but not being clear about it.
There's only one "clock" that could mean anything here - it's that part of the machinery of a microprocessor, that provides the fundamental driving pulse of energy, and which triggers the transition of the processor between the states defined as part of its design (including intermediary states, in the case of multi-cycle instructions).
In the case of 'beat' it's not just a translation or an ahistorical metaphor - the original design documents for some British computers use that exact term to describe the operation of the thing they're building. With respect to the "as seen..." part: the clock is in principle generated somewhere and is conveyed to the processor logic. The beat (or tact) is what the processor does during each clock interval; the distinction seems reasonable to make. Jan 2 at 13:23
@another-dave, agreed, "beat" is a reasonable enough word, just not as reasonable a translation as "tick". But your explanation for "as seen..." I don't think is very clear. A processor design defines a set of resting states - states that are held whilst the driving pulse is not supplied. A design also specifies how every state transitions to the next when a pulse is supplied. A tick is a transition from one to the next (caused by supplying that driving pulse). The clock, itself, can tick, but I don't see what distinction exists between a clock-tick, processor-tick, and a processor-beat.– SteveJan 2 at 15:00
I don't think there was an intent to distinguish a clock tick from a processor tick; rather, I read it as 'what the processor does on a clock tick'. But at this point I'm merely guessing as to what someone else meant. Jan 2 at 16:00