Shit, that was way over my head. Let me break this down to see if I understand.
Sorry, I'm not good at explaining. I'll try step-by-step:
1. The 3D engine uses 8.8 fixed point numbers. What impact does that have on my two-byte position variables?
It's best that you keep using those variables, and to use it with the 3D engine, check the distance between the position of a chip (this doesn't need to be accurate), and if it's below the maximum viewing distance (for example: 100), then substract the player's coordinates from the coordinates of the ship and store in signed 8-bit variables. Then you use that as the integer part of the xpoint, ypoint and zpoint variables. Then set the from coordinates to 0 (or edit the 3D engine so they will always be treated as 0 (faster)). Then you just call C3Dto2D, and use the onscreen x and y coordinates as the location for drawing a scaled sprite, of which you calculate the size by the 'depth' (z-coordinate) of the point. Don't forget to check if the point is valid (a=1 after calling C3Dto2D), or the camera will look forward and backward.
2. I understand about speed. How do I make Speed variable?
The move routine I gave you is the only routine that uses the speed constant, so just replace the constant with the variable. Based on how your game works, It's best to set the x, y and z used in the routine to 0, then call it and add the integer parts of the outputs to your position. Then save the decimal parts and use them again for the next time you call the move routine. Also don't forget that these numbers are signed when handling them.
3. Do I need to look for a ship, then call the 3D engine each time I find one? Or does one of those routines handle that?
you need to handle that yourself. The 3D engine is still in an early stage so it can only convert individual points.
BTW: I forgot to answer this in my previous post, but yes, the temp variables can be overwritten, but only between the routines, so make sure the interrupt routine doesn't use them.