England require another 318 runs with 8 wickets remaining at stumps on day 4.
Alastair Cook led England's dogged resistance with a diligent fifty before falling to the final delivery of the day as India stayed on course for victory in the second test on Sunday.
Trapped in front by a Ravindra Jadeja delivery, Cook reviewed but could not get the lbw decision overturned in what was a massive blow to England ahead of an intriguing fifth day's play on Monday.
Joe Root was batting on five with the tourists on 87-2, still needing 318 runs for an improbable victory on a track offering significant turn and uneven bounce.
Chasing a daunting 405 on a deteriorating wicket, Cook and Haseem Hameed initially defied the Indian bowlers, who could not separate the openers in the afternoon session.
Hameed lived up to his 'Baby Boycott' moniker, frustrating the home bowlers with his solid defence even if the 19-year-old took a couple of painful blows to his body during his three-hour spell at the crease.
In desperation for a breakthrough, India captain Virat Kohli wasted both reviews on Cook in successive overs, trying to get his counterpart leg-before.
After India spent 50 overs toiling without success, Ravichandran Ashwin dismissed Hameed leg-before with a delivery which kept low.
Cook brought up his 53rd test fifty in 171 balls but his late dismissal for 54 was a disappointing end to a day England had begun well by bowling India out for 204 in their second innings.
England paceman Stuart Broad (4-33) was exceptional despite physical discomfort as he and leg-spinner Adil Rashid (4-82) claimed six of the last seven India wickets after the hosts had resumed on 98 for three.
Broad is nursing a foot injury and will be assessed after the test but there was no let up in hostility from the bowler who troubled the Indian batsmen with his probing cutters.
Ajinkya Rahane was out on 26 when he surrendered to one such leg-cutter and, surprised by the extra bounce, gloved it to Cook at slip.
Broad then got Ashwin caught behind to peg back India before Rashid took over.
The 28-year-old dismissed Wriddhiman Saha and then struck a body blow, tempting Virat Kohli into a wild drive only for the edge to fly to slip where an airborne Ben Stokes took a spectacular one-handed catch.
Debutant Jayant Yadav made 27 not out as he and Mohammed Shami added 42 for the final wicket in the first ever test match in the port city of Visakhapatnam.
1st Test: Williamson guides NZ to win over Pakistan
Australia make drastic changes to avoid whitewash
Stats: Ashwin equals Kapil Dev's record
'Kohli's captaincy can help us win abroad'
Steyn takes a dig at Aussies over ball tampering charge