I started researching framedata for kof 98 um with the help of the "Command" feature in training.
With this little tool, you can not only create macros, but also effectively count frames, if you are a little creative.
All of my data is built on several assumptions, which means, it's not fool proof, and prone to error.
Assumptions:
1. a move can be cancelled into a roll or ABC in EX mode on its first active frame (exception: several special moves). Also true for jumping normals.
2. The moment you active a normal / special (the frame where the button gets pushed) counts towards the startup time.
The process of creating this data takes a very long time. Startup frames take around 20-30 minutes per char, but active time takes a lot longer, since setting up the procedure to check them takes a lot longer, see bottom of the post for details.
So i would like to ask for help from the community: if we all split up chars between us, we can easily create a full list of frame data, at least for all the normals.
Please see below the list for some guidelines.
Here is what i have so far:
GENERAL:
time a direction has to be active for the game to register:
4-5 frames.
example: down+LP, let go of down at 4-5 frames or later: c.lp comes out. let go earlier, standing lp will come out.
by the way if i could name one thing i hate the most about kof, THIS IS IT. While this feature exists in almost all fighting games, the frame window is the biggest in KOF, which makes some combos really hard for me.
========================
GEESE
========================
wakeup time 76/77 frames (tested with geese sweep, only comparative value)
5A(c) - 7f, 3f active
5A(f) - 7f, 4f active
5B(c) - 6f, 3f active
5B(f) - 9f, 4f active
5C(c) - 7f, 2f active
5C(f) - 9f, 6f active
5D(c)[1] - 7f, 3f active
5D(f) - 11f, 5f active
6B - 23f, 3f active
CD - 15f, 2f active
2A - 7f, 3f active, total duration 25f, <7f advantage on hit
2B - 7f, 4f active, total duration 25f, <7f advantage on hit
2C - 7f, 6f active,
2D - 12f, 5f active
j.A - 10f
j.B - 8f
j.C[1] - 9f
jump up, j.C - 10f (when geese jumps up straight, normal jump, no small jump, his j.C has a different animation)
j.D - 12f
j.CD - 12f
----------
236A - 7f, 9f active, 32f recovery, 48f total. meaty on block still negative static difference. (couple of frames).
236C - ??
623A - 9f
623C - 18f
63214A - 13f
63214C - 21f
===================
KYO
===================
wakeup time 80/81 frames (tested with geese sweep, comparative value only)
5A(c) - 7f
5A(f) - 7f
5B(c) - 9f
5B(f) - 11f
5C(c) - 6f
5C(f) - 16f
5D(c) - 8f
5D(f) - 14f <-- changed from KOF 98 classic! 4 frames faster.
6B - 15f
3D - 6f (!)
CD - 19f
2A - 7f
2B - 7f
2C - 8f
2D - 15f
j.A - 9f
j.B - 9f
jump up, j.B - 9f
j.C - 10f
j.2C - 10f EDITED - used to be 13f before, which is wrong.
jump up,j.D - 11f
j.D - 13f
f.CD - 17f
---------
623A - 6f
623C - 6f
236A - 12f
236C - 18f
236B - 14f
236D - 18f
421B - 19f (perfect distance), 20f (point blank)
421D - 32f (perfect distance), 33f (point blank)
63214B/D - 14f
------------------------------------------------------
so, how to find out startup frames?
you program this:
[normal],NNNNNNNNNNNNNNNN,[AB]
make sure to include a generous pause between the push of the button and the roll cancel (start with around 12 frames for quick attacks, 20 frames for slower attacks)
1. once you see your character roll canceling the hit, keep reducing pause frames until your character stops roll canceling the hit.
2. Add the last frame you took away, so that he roll cancels again
->> count the frames, INCLUDING the normal, EXCLUDING the roll cancel. That is the startup time of the normal.
for crouching normals, make sure the setup looks like this:
2222[2+normal]2222NNNNNN and so on. If you don't do this, your char will stand up to do the normal.
for special moves, here are some examples (i will use numblock notations for this one):

22336[6+normal],6666NNNNNNNN [ABC]

41122336[6+normal] see above
for jumping moves, program it like this:
6x up or 9x up, (depending whether you want a smalljump or normal jump),NNNNNNNN(just program a short pause), normal, NNNNNNNN, ABC.
1. keep reducing the first pause if the char is too high when he does the normal, increase it if he is too low.
2. keep reducing the second pause like you do for standing normals, until the ABC doesnt come out anymore, then add 1 frame, count.
finding out ACTIVE time:
this takes quite a while.
1. program this:
2222[2+D]2222, then a LONG pause (around 75-80 Ns), then the normal, after the normal, add a pause that equals his startup time, then [AB] or EX mode [ABC].
an example would be:
geese vs. kyo:
2222[2+D]2222, 80xN (roughly), HP,6xN (since HP has 7 frames startup, and the HP counts as frame 1), then [BC].
then keep reducing the first pause. EVERY FRAME THAT HITS WITHOUT TRIGGERING THE ROLL IS AN ACTIVE FRAME. Count them one by one and keep decreasing the first pause until the move does not hit anymore.