The polygons seem to get 100% love or 100% hate. I'll say this: Showing large polys without any double-buffering at that framerate must mean something fishy is going on. It is -- only the deltas that need to be drawn are calculated and put into video RAM.
I'd like to add that because you don't have a backbuffer, you need to draw from top to bottom, where conventional rendering just draws the polygons in whatever order they come in ('polygon soup').
The donut shape makes it extra difficult, since is is an inconvex object (rarely seen in games). Which means you need to take care of the z-order as well (with convex objects such as the pyramid and cube, just backface culling is enough to ensure proper z-order, since the object cannot overlap itself anywhere by definition).
I have done plenty of software renderers over the years, but the one I came up for for this platform is very unique. I have never written anything like it before, and I don't think many similar implementations exist. I started out just trying to optimize a conventional renderer to the extreme (based on the code of my 1991 donut intro), but that didn't get me very far on the limited bandwidth of the CGA card, so I had to completely re-think how to render polygons.