Morne Morkel and Dane Piedt took two wickets apiece as Zimbabwe lost five wickets for 26 runs in 10 overs after lunch today, but Richmond Mutumbami and John Nyumbu dug in to leave the scores level at the tea break.
Mutumbami received the biggest cheer of the day when he drove Piedt through the covers for three to scratch out Zimbabwe's 141-run first-innings deficit.
That saw him reach tea unbeaten on 15, while Nyumbu was four not out.
However Dale Steyn trapped Mark Vermeulen lbw in the fifth over after lunch, sparking a procession in which the hosts fell from 98 for two to 124 for seven.
While Piedt caught and bowled opener Vusi Sibanda for 45 and also grabbed the prize wicket of Brendan Taylor, Morkel bowled Regis Chakabva and then had Sean Williams brilliantly caught at backward point by JP Duminy.
Morkel went to tea with figures of 3 for 15, while Piedt had 3 for 60 in the innings and 7 for 150 in the match.