If you do decide to make this with Arduino and H-Bridge shields, I wrote this code the other day as a learning experience (I'm new to Arduino) until I realized you wanted a non-MCU solution. Don't have an H-Bridge to test but seems to give proportional bi-directional control. This is just for the "horizontal" motor.
int deadZone = 50; // joystick deadzone rangec
int maxPWMValue = 255; // maximum PWM value. 255 for built-in PWM
int horizPotPin = A0; // Analog pin for horizontal pot sense
int horizPWMPin = 9; // Horiz motor speed control connected to this pinr
int horizDirPin = 2; // directional control connected here. HIGH = forward, LOW = reverse
void setup()
{
pinMode(horizPWMPin, OUTPUT);
pinMode(horizDirPin, OUTPUT);
// for debugging
Serial.begin(38400);
}
void loop()
{
int horizPWM = 0; // holds the pwm output for 'horizontal' motor
boolean forwardDir = true; // direction for 'horizontal' motor. true = forward, false = reverse
// read horizontal pot value
int horizPot = analogRead(horizPotPin);
// map the analog value of 0..1023 to -255..+255
// If the direction and speed go in the wrong direction compared to joystick movement,
// just switch the sign of the last two parameters
int h = map(horizPot, 0, 1023, -maxPWMValue, maxPWMValue);
// check if joy in reverse position
if (h < 0)
{
forwardDir = false;
h *= -1;
}
// only set final PWM output if joy is outside of deadzone range
if (h > deadZone)
horizPWM = h;
// set pwm and direction
digitalWrite(horizDirPin, forwardDir);
analogWrite(horizPWMPin, horizPWM);
//debug crap
Serial.print(horizPWM );
Serial.print(", ");
Serial.println(forwardDir);
delay(50);
}