What I do for 3D games in BizHawk is to load up a lua script that continually sets analog input using a few x/y variables, and uses keyboard input to modify said variables. There are several ways you can go with that, thanks to the power of lua scripting, but here's a simple example that maps WASD to analog inputs for player 1's left stick (script setup for PSXHawk, but can also be applied to N64 with minor changes):
Language: lua
local x = 128
local y = 128
while true do
keyTable = input.get()
analogTable = joypad.get(1)
if keyTable ['A'] == true then
x = "1"
elseif keyTable ['D'] == true then
x = "255"
else
x = "128"
end
if keyTable ['W'] == true then
y = "1"
elseif keyTable ['S'] == true then
y = "255"
else
y = "128"
end
analogTable["LStick X"] = x
analogTable["LStick Y"] = y
joypad.setanalog(analogTable, 1)
emu.yield()
end
Of course this sample isn't practical for TASing yet, but there's plenty of stuff you can do with the x and y variables to get the numbers you want. Use keys to increase/decrease numbers, use
forms to input numbers, etc.