I suspect a full answer is improbable, but to offer a fragment:
He took the Macro 10 Assembler and defined macro, so we could just
type in sort of a form of 8080 code. Then he modified the DDT-10, the
symbolic debugger that was on the 10, to understand these
instructions. He then wrote a simulator to simulate these
And, because we'd never had the chip, just the book from Intel, if we had made any mistake in terms of how the instructions worked, the thing never would have run. [...] Paul was scheduled to fly out to Albuquerque. He decided to go get some sleep. I stayed up all night reading the book to see if we'd miscoded some of the instructions. And finally, decided it was all okay, punch out the paper tape, and made sure Paul got that before he went off on his plane.
So as to your first question of how, it sounds like the simulator may actually have been, or have started as, a static recompiler — they not just wrangled 8080-esque syntax via macro, but also ensured that the symbolic debugger could "understand these instructions". I cannot make sense of attaching a machine's native debugger and teaching it to understand macro-sourced compounds as anything other than static recompilation.
I am further assuming that since it is documented that the 8080 simulator is a code adaptation of the 8008 simulator, Gates is speaking in aggregate.
Given that a simulator is then mentioned as a third step I'd dare imagine it went:
- macros to provided 8008-esque syntax, assembling into sets of instructions that simulate 8008 behaviour;
- adapt the debugger to understand that;
- start coding the intended product, using tools developed so far to try to get correct code;
- simultaneously write a simulator, little more than a fetch-dispatch lookup loop;
- use that as a way to verify real 8008 bytecode, once you're at the stage of taking your correct code and ensuring that it is efficient for time and space.
As to testing correctness, it sounds like all they had was the official documentation from Intel. Luckily Intel documentation of the era tended to be reasonably complete and accurate as far as it went. Likely they just declined to try to use any functionality that wasn't sufficiently well specified. That specific quote is about the Altair 8080 BASIC rather than the 8008 so one can at most speculate a similar process: build the software from the official documentation, test as and when a real opportunity arises but due to resource availability, not until very late.