The Proteas had declared an opening innings off 418/9, and bowled out Zimbabwe for 251, halfway through the final session on Sunday.
They will subsequently start day three on 49/1.
Zimbabwe had struggled against the South African attack, including debutant Codi Yusuf and all-rounder Wiaan Mulder, with only Sean Williams contributing, with an impressive 137, his sixth test century.
Mulder ended with 4/50 while Yusuf boasted figures of 3/42 in 14 overs.
The Proteas were able to hit their first innings score with help from centuries from Lhuan-dre Pretorius, also on debut, and Corbin Bosch, who finished with 100 not out.
ZIMBABWE: Brian Bennett, Takudzawanashe Kaitano, Nick Welch, Sean Williams, Craig Ervine (capt), Wessly Madhevere, Tafadzwa Tsiga (wk), Wellington Masakadza, Vincent Masekesa, Tanaka Chivanga, Blessing Muzarabani
SOUTH AFRICA: Matthew Breetzke, Tony de Zorzi, Wiaan Mulder, David Bedingham, Lhuan-dre Pretorius, Dewald Brevis, Kyle Verreynne (wk), Corbin Bosch, Keshav Maharaj, Codi Yusuf, Kwena Maphaka