Back

Taito F3 Video Signal

pixel clock: 6.6715 MHz
432 pixels per scanline (~15.44 KHz)
262 scanlines per frame (~58.94 Hz)
Sync signal is active low.

Diagram:

greenhsync pulse (sync low)
redvsync pulse (sync low)
yellowhsync + vsync (sync high)
grayimage output

Table:

{long hsync} = [hsync start] 32px [hsync end]
{short hsync} = 16px [hsync start] 16px [hsync end]
scanlinessignal
0{long hsync} 184px {long hsync} 184px
1,2{short hsync} 184px {short hsync} 184px
3{short hsync} 184px {short hsync} [vsync start] 184px
4,5{short hsync} 184px {short hsync} 184px
6{short hsync} 184px {short hsync} [vsync end] 184px
7,8,9{short hsync} 184px {short hsync} 184px
10{short hsync} 400px
11-22{long hsync} 400px
23{long hsync} 64px 319px [image start] 1px [image end] 16px
24-254{long hsync} 64px [image start] 320px [image end] 16px
255{long hsync} 64px [image start] 319px [image end] 1px 16px
256-261{long hsync} 400px

Comparison to Ntsc

The F3 outputs a "240p" signal, approximating ntsc field 2 (vsync starts in the middle of a scanline) rather than the more common field 1.  Unlike most "240p" devices, it does try to output the correct equalizing and synchronizing pulses during vblank (i.e. two pulses per scanline for 9 scanlines, with the middle 3 being very long pulses), but incorrectly enough that it may do more harm than good.  It also fails to begin every scanline with a sync pulse (there are 7 scanlines where the pulse is delayed by 16 pixels, and 3 where it is delayed by 32 pixels with the previous pulse crossing the start of the scanline)

scanlineF3 sync pulsesNtsc field 2 sync pulses
pulse 1pulse 2pulse 1pulse 2
0 32* 32[a]32*16
1 (16+)16 (16+)161616
2 (16+)16 (16+)161616
3 (16+)16 (16+)16+200[b][c]16184
4 (32+)200[c] (32+)200[c]184184
5 (32+)200[c] (32+)200[c]184184
6 (32+)200[c] none[d]18416
7 (16+)16 (16+)161616
8 (16+)16 (16+)161616
9 (16+)16[e] (16+)16[e]16none
10 (16+)16 none32none
11+ 32 none32none

* technically this first half-scanline would belong to the preceeding field 1.
"(N+)" indicates an erroneous delay before the pulse.
[a] wrong length synchronizing pulse.
[b] actually 2 pulses with a barely-detectable gap between them.
[c] equalizing pulses are too long, and extend past where the (delayed) next pulse should've started.
[d] missing synchronizing pulse.
[e] 1 too many scanlines of synchronizing pulses.
[b], [c], and [d] are consequences of how vsync is handled: instead of lengthening the sync pulses during vsync, they instead xor sync with the vsync signal.

Notes

at startup, the f3 will output an invalid video signal (mostly consisting of garbled vblanks) for several frames.

scanlines 0-9 have two hsync pulses. scanlines 1-10 have shorter hsync pulses. (i.e. these mostly coincide, but not completely)

scanline 23 has one pixel of image output (most games hide this scanline).  scanline 255 is missing 1 pixel (some games hide this scanline)

plot the timing of interrupts 2 and 3