Craig Ervine hit an unbeaten 151 to pull Zimbabwe out of trouble on the opening day of their one-off Test against Sri Lanka on Friday.
Ervine's career-best effort lifted Zimbabwe from a precarious 70-4 to 344-8 at stumps. Sri Lanka spinner Rangana Herath took four wickets.
The left-handed batsman held on with Donald Tiripano (24 not out) at the end of play, putting on a frustrating 62-run stand for the ninth wicket.
Ervine, who surpassed his previous Test best of 146, built crucial partnerships including a 84-run fifth-wicket stand with Sikandar Raza (36).
It was the 31-year-old's second Test ton in the 12th match of his seven-year-old international career.
Herath, 39, who returned figures of 4-106, provided early delight for Sri Lanka's new Test captain Dinesh Chandimal after he lost the toss.
Herath sent back openers Regis Chakabva for 12 and Hamilton Masakadza for 19 to rattle the Zimbabwe top-order at the R Premadasa Stadium in Colombo.
Paceman Lahiru Kumara got debutant batsman Tarisai Musakanda caught behind for six as Zimbabwe suffered regular losses in the first two sessions.
Herath took Raza and then Malcolm Waller (36) but Ervine stood firm from one end to thwart Sri Lanka's bowlers.
Medium-pace bowler Asela Gunaratne claimed two wickets while off-spinner Dilruwan Perera and Kumara took a wicket each.
Graeme Cremer's Zimbabwe are on a high after completing victory in a one-day series this week.