It's really cool to find so much people interested in 3D matters

Sorry for my delay but I was a bit busy.
This is, in short, how E3D works.
Let's say that a vertex is a set of 3 coordinates: x, y and z.
Every E3D_OBJECT is made up of its own set of vertex: a vertex list.
In this vertexlist all coordinates are local: relative to the "center" of the object.
(1) - Applying a local to world transformation you get a worldVertexList where every entry contains the coordinates of vertex relative to the "world" origin.
(2) - Applying a world to view transformation you get a viewVertexList where every entry contains the coordinates of vertex relative to the "view-point",
substantially the origin of the world is moved into the camera.
(3) - Applying a view to screen transformation you get a screenVertexList where every entry contains the x and y coordinates of every vertex relative to the center of your viewing window (real screen coordinates are obtained adding an x and y offset: the position of the viewing window on your screen).
Transformations in (1) and (2) may be achieved with matrix multiplication:
multiplying every vertex (which is an array of 3 coordinates) by the related affine matrix
(9 multiplications and 6 additions for each vertex (right GhostP?

).
In (3) extra caution is required because of perspective.
I use a world-to-screen method: all vertex in the viewVertexList are
projected on a plane (which is the viewing window on your screen).
This plane is placed at a focus distance from the eye (or camera).
Focus values are application dependent, personally I choose 5/6 of window vertical size
(if your window is 640 x 480 then focus is 480*5/6 = 400).
To obtain screenVertexList I use these proportions:
xView : zView = xScreen : focus
yView : zView = yScreen : focus
so
xScreen = (xView * focus) / zView
yScreen = (yView * focus) / zView
zView must never be 0.
Also negative numbers are not convenient: vertex is behind the eye so it is not visible.
Clipping on z axis is required, if you are managing a starfield then
if a vertex as z < focus the problem is trivially solved.
If you are managing segments or polygons then it's a bit more complex,
but this is another argument

.
Once z clipped (all z are >= focus), your primitives could require x and y clipping too (if 1 or more vertex drop outside your viewing window)...
this is also another argument

.
Out of stage (3), once clipped in every direction, rasterization can be performed.
Actually E3D uses painter algorithm (far to near drawing order).
Software Z-buffer cannot be achieved in real-time also for R800

.
I hope one-chip MSX will give us the speed to do this.
/***/
Precalculated sin and cos tables are (in my opinion) performance effective,
E3D angles are 8 bits wide (unsigned) so 256 possible orientations.
Sin and cos values are 16 bits wide with the following format:
1 bit = sign
1 bit = integer part
14 bit = decimal part
Sin and cos values are obtained with a 512 bytes (each) precalculated look-up table.
E3D coordinates are 16 bits wide, C integers.
So when a coordinate must be multiplied by a sin or cos I can
use R800 16bit multiply instruction and to keep only the 16 m.s.b. of the result.
(I loose precision but gain speed).
Moreover localVertexList is never modified so the "original" object is preserved from
degenerating after many rotations.
/***/
If you wish a deeper (and surely better) explaination I can send you documentation
from an online book where all these things are (in my opinion) well detailed.