Booting Microsoft's First Product: Altair BASIC for the MITS Altair 8800 (featuring: Altair-Duino)

The Altair 8800 is widely considered to be the world's first commercially successful personal computer, and is famously the machine that spurred Bill Gates and Paul Allen to create Microsoft. In this video I demonstrate loading Microsoft's Altair 8K BASIC from tape using an audio cassette interface card for the Altair-Duino. Altair BASIC (Wikipedia): https://en.wikipedia.org/wiki/Altair_... The Altair 8800 was designed in 1974 by MITS (Micro Instrumentation and Telemetry Systems). In its base configuration, the machine shipped as a kit and came with an Intel 8080 CPU, running at 2 MHz, paired with just 256 bytes of RAM. Altair 8800 (Wikipedia): https://en.wikipedia.org/wiki/Altair_... The Altair-Duino used in this video also came in kit form and uses an Arduino Due to emulate the original Intel CPU. The pre-loaded firmware on the Arduino provides a highly accurate recreation of the original machine. The Altair-Duino provides up to a full complement of 64 KB of RAM, as well as various interface cards, including the popular 2SIO card, allowing output to serial terminals. Adwater & Stir (Chris Davis) Altair-Duino: https://adwaterandstir.com/altair/ Hardware and Software Simulation (David Hansel) Arduino Altair 8800 simulator: https://github.com/dhansel/Altair8800 I/O Bus for Altair 8800 simulator: https://github.com/dhansel/Altair8800... Integrated Serial Terminal (Geoff Graham) VT100 Terminal: https://geoffg.net/terminal.html Arduino Due: https://docs.arduino.cc/hardware/due/ Paired with a compatible recreation of the 88-ACR audio cassette recorder interface card, the Altair-Duino is able to load Altair software from audio cassette, in MITS' original format, including Microsoft's very first product: Altair BASIC. 88-ACR Documentation: https://deramp.com/downloads/altair/h... Here, the Altair-Duino has been configured with 24 KB of RAM and a 2SIO card. While bootloader PROMs were available, and can be emulated, in this video I'm using the Altair's famous toggle switches to input the required bootstrap loader. Once entered, I load BASIC from cassette. I then write a couple of simple BASIC programs to demonstrate the input and output capabilities of the original Altair and the simulated environment offered by the Altair-Duino. Altair BASIC 4.0 8K bootstrap loader (octal) 000: 041 302 037 061 022 000 333 006 010: 017 330 333 007 275 310 055 167 020: 300 351 003 000 Altair 8800 BASIC reference manual: https://deramp.com/downloads/altair/s... The version of BASIC (8K 4.0) used in this video was provided by Mike Douglas, of https://deramp.com. Mike has provided numerous high-quality Altair resources to the community over many years, and I would encourage you to take a look at some of his excellent videos for more information about this historic machine. Mike Douglas Websites: https://deramp.com https://altairclone.com Altair audio files: https://deramp.com/downloads/altair/s... Altair playlist:    • Altair 8800 and Related Microcomputers   Other resources: 8K Basic 4.0 cassette loader disassembly: https://jsonj.co.uk/project/altair/ca... ; the following has been revised to ; use a label for the sp load address LXI H,1FC2H LS: LXI SP,RA IN 06H RRC RC IN 07H CMP L RZ DCR L MOV M,A RNZ PCHL RA: DW LS Intel 8080 Online Assembler: https://www.asm80.com/onepage/asm8080... Intel 8080 Assembly Language Reference Card: https://archive.org/details/intel-808... Intel 8080 Assembly Language Programming Manual: https://archive.org/details/intel-808... Altair 8800 Simulators https://s2js.com/altair/ https://wixette.github.io/8800-simula... -- 00:00 Altair 8800 Background 01:25 Inside the Altair-Duino 03:15 Audio Cassette Interface 04:20 Configuring the Machine 05:05 Toggling in the Bootloader 10:05 Configuring the Second Stage Loader 12:05 Loading BASIC from Audio Cassette 14:25 Understanding the Boot Process 19:40 Initialising BASIC 22:00 Using the Output Card 23:40 A Basic BASIC Program 25:40 For Loops as a Delay 26:50 Reading the Input Switches 28:05 Run-time Program Control