Traf-O-Data was the first business partnership between Paul Allen, Bill Gates and Paul Gilbert. In order to develop the software for their custom-built Traf-O-Data machine (Intel 8008 Inside™), Paul Allen programmed an 8008 simulator for the IBM 360.

We taught ourselves to simulate how microprocessors work using DEC computers, so we could develop software even before our machine was built. — Paul Allen

This 8008 simulator was later modified to become Microsoft's 8080 simulator.

  • How was the Traf-O-Data Intel 8008 simulator developed?
  • What references (documents, machines) were used?
  • How did they ensure that it was a faithful emulation before their machine was built?

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 instructions.


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.

  • I can't believe you even found this great reference. How do you find references like this? Using google or some kind of special search engine? – LateralTerminal Nov 6 '17 at 20:58
  • 1
    Surprisingly, that one came just from the footnote list of the Wikipedia entry for Traf-O-Data. – Tommy Nov 6 '17 at 21:00
  • 1
    It looks like they were still using the MACRO-10 assembler when they created the 6502 version of Microsoft BASIC as the source uses a number of MACRO-10 directives and syntax elements. – Ross Ridge Nov 6 '17 at 21:34
  • 3
    I found a page that confirms what I just said, and explains more about how the emulator worked: "In the case of targeting the simulator, the code created by the assembler could just be run without modification, since every emitted PDP-10 instruction was constructed so that it would trap – the linked-in simulator would then extract the 6502 opcode from the instruction and emulate the 6502 behavior." pagetable.com/?p=774 – Ross Ridge Nov 6 '17 at 21:42
  • 1
    @RossRidge I've marked the answer as community wiki, since it's just a fragment and more information is incoming. Please update. Assembling each virtual instruction into a single trap instruction and having the trap handler figure out what to do is a sufficiently different thing from my guess of "sets of instructions that simulate" to be worth it, I think. – Tommy Nov 6 '17 at 22:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.