Microsoft BASIC
Microsoft BASIC is a family of implementations of the BASIC (Beginner's All-Purpose Symbolic Instruction Code) programming language developed and distributed by Microsoft Corporation, originating with the company's inaugural product, Altair BASIC, released in 1975.[1] This interpreter was specifically designed for the MITS Altair 8800, one of the first commercially successful microcomputers, and marked a pivotal moment in making programming accessible to non-experts through its simple syntax and interactive environment.[2] Altair BASIC, available in 4K ($150), 8K ($175), and Extended ($350) versions, was distributed on paper tape or audio cassette, enabling early hobbyists to write and run code on affordable hardware.[3] Developed by Bill Gates and Paul Allen in response to the Altair 8800's introduction in Popular Electronics magazine on January 1, 1975, Microsoft BASIC quickly expanded beyond its initial Intel 8080 target to support diverse microprocessors, including the Zilog Z80, Motorola 6800, and MOS Technology 6502.[4] By 1977, ports for popular machines like the Commodore PET, Apple II, and Tandy TRS-80 established it as a de facto standard for personal computing, powering applications in education, games, and business software.[2] Subsequent evolutions, such as Extended BASIC for CP/M systems and the disk-based Disk BASIC-80, introduced features like file handling and structured programming elements, broadening its utility.[4] In the 1980s and beyond, Microsoft BASIC adapted to operating systems like MS-DOS with versions including GW-BASIC and QBasic, which bundled with IBM PCs and clones to teach programming and support legacy code.[4] The lineage culminated in graphical iterations like Visual Basic in 1991, which revolutionized rapid application development for Windows through drag-and-drop interfaces.[2] Microsoft's ongoing commitment to BASIC's legacy was evident in 2025, when it open-sourced the historic 6502 BASIC interpreter to preserve its role in computing history.[5] Overall, Microsoft BASIC democratized software creation, influencing generations of programmers and contributing to the explosive growth of the personal computer industry.[1]Origins and Early Development
Altair BASIC
Microsoft was founded by Bill Gates and Paul Allen on April 4, 1975, with the primary goal of developing a BASIC interpreter for the MITS Altair 8800, the first commercially successful microcomputer kit based on the Intel 8080 microprocessor.[6] The Altair 8800, introduced earlier that year, lacked any built-in software, creating an opportunity for Gates and Allen, who had seen the machine featured on the cover of Popular Electronics in January 1975.[7] Their partnership, initially named Micro-Soft, was formed to capitalize on this nascent market for personal computing software.[8] The development of Altair BASIC was an intensive effort completed in approximately eight weeks without access to the actual hardware. Gates and Allen used a PDP-10 minicomputer at Harvard's Aiken Computation Laboratory to create an emulator for the 8080 processor, allowing them to write and test the interpreter in assembly language.[9] Gates handled the core design and initial coding of the BASIC runtime, while Allen contributed to the emulator and assembly optimizations. Monte Davidoff assisted with the floating-point mathematics routines.[10] The resulting interpreter was released in three variants: 4K BASIC for systems with 4 KB of RAM, 8K BASIC for 8 KB systems, and an extended version requiring at least 12 KB that added advanced features. These were distributed on paper tape or audio cassette, priced at $150 for 4K, $200 for 8K, and $350 for the extended edition.[3] Altair BASIC emphasized simplicity for hobbyists, featuring integer-only arithmetic in the 4K and 8K versions with limited single- and double-precision floating-point support introduced in the extended variant. Programs were structured with line numbers ranging from 0 to 65529 for sequencing, and the interpreter supported immediate mode execution for direct command input without storing lines.[11] Technically, the code was implemented in Intel 8080 assembly, occupying a compact 2-4 KB memory footprint to fit within the Altair's constrained RAM, and it included drivers for teletype interfaces via serial I/O for input and output operations.[10] In February 1975, Paul Allen demonstrated a working version of Altair BASIC to MITS executives in Albuquerque, New Mexico, securing a licensing agreement that marked Microsoft's first major deal.[12] The software officially shipped as version 2.0 in July 1975, contributing to the Altair's success with over 10,000 units sold in the following year, though widespread piracy among hobbyists limited paid copies and prompted Gates to publicly address the issue.[13] This early interpreter evolved into subsequent 8-bit implementations like BASIC-80.[8]Expansion to Early Microcomputers
Following the success of Altair BASIC, Microsoft rapidly expanded through licensing agreements in 1975 and 1976, targeting manufacturers of S-100 bus-compatible microcomputers. Key deals included contracts with IMSAI for integration into the IMSAI 8080, where a 4K ROM-based version of Microsoft BASIC served as the primary programming environment, and with Processor Technology for the Sol-20 terminal computer, which featured Microsoft BASIC 4.1 in its personality module ROM for immediate boot-up capabilities. Other S-100 producers, such as PolyMorphic Systems for the Poly-88, adopted similar ROM implementations to provide users with an out-of-the-box interpreter, enabling these systems to compete directly with the Altair 8800.[1][14][15] Adaptations of Altair BASIC for these platforms involved porting the core interpreter to the Intel 8080 microprocessor—already foundational to the Altair—and later accommodating the compatible Zilog Z80 in emerging designs. Enhancements focused on practical usability, such as adding cassette tape input/output routines for program storage and loading, alongside drivers for basic peripherals like keyboards and video displays common in S-100 setups. These modifications ensured compatibility across hobbyist systems while maintaining the interpreter's compact footprint, typically fitting within 4K to 8K ROM constraints.[16] The expansion significantly boosted Microsoft's early revenue, with 1975 sales from BASIC licensing reaching $16,005, and played a pivotal role in popularizing personal computing by making programming accessible to non-experts on affordable hardware. However, widespread unauthorized copying of the software among hobbyists posed major challenges; Bill Gates addressed this in his "Open Letter to Hobbyists" published on February 3, 1976, in the MITS newsletter Computer Notes, arguing that piracy undermined incentives for quality software development and urging hobbyists to pay for copies.[1][17][18] Specific integrations highlighted these advancements, such as the Sol-20's seamless ROM-based BASIC for video terminal operation and the Poly-88's cassette-loadable variant requiring 11K RAM. Version 3.2 of Microsoft BASIC, released in 1976, introduced key enhancements to floating-point mathematics and better handling of single-precision calculations for scientific applications.[19]8-Bit System Implementations
BASIC-80 and Its Extensions
Microsoft BASIC-80 was released in 1977 as a standardized interpreter designed for 8080 and Z80 microprocessor-based systems, particularly those running the CP/M operating system and other early microcomputer environments. The core 8K version occupied approximately 8 kilobytes of ROM or RAM and provided essential programming capabilities, including support for structured elements such as subroutines via the GOSUB and RETURN statements, which facilitated modular code organization beyond simple GOTO-based flow control. This version emphasized compatibility across diverse hardware, requiring minimal memory while handling integer and single-precision floating-point arithmetic, with roots in the floating-point routines originally developed for Altair BASIC.[20][21] In 1978, Microsoft introduced the Extended BASIC-80 variant, an upward-compatible enhancement to the 8K version that expanded functionality for more advanced applications. This extension supported longer program lines up to 255 characters, double-precision floating-point numbers for greater numerical accuracy, and commands for machine code integration, such as the USR function for calling assembly-language subroutines and the CALL statement for direct invocation of external routines. Additionally, it incorporated provisions for hardware-specific features like color graphics output and sound generation, enabling developers to interface with video displays and audio peripherals through platform-adapted drivers, while maintaining core compatibility with CP/M systems. The Disk BASIC-80 extension followed in 1979, building on the Extended version to add comprehensive file management capabilities, including sequential and random-access operations on floppy disks via statements like OPEN, PRINT#, INPUT#, GET, PUT, FIELD, LSET, and RSET, which allowed efficient data storage and retrieval in business and data-processing contexts.[22][21][20] A standalone edition of Disk BASIC-80 emerged in 1980, tailored for environments lacking a full operating system, and distributed on cassette tapes to accommodate systems without built-in disk drives. This version included an integrated line editor for program modification, along with utilities such as RENUM for renumbering lines, DELETE for removing code segments, and LIST for formatted output, enabling self-contained operation on bare-metal hardware. Technically, BASIC-80 implementations, including the disk variant, were written in Z80 assembly language for optimized performance on compatible processors, with the Disk version requiring at least 16 KB of RAM to support dynamic memory allocation for variables, strings, and file buffers. Hardware interaction was facilitated by commands like POKE, which wrote bytes to specific memory addresses, and PEEK, which read from them, allowing direct manipulation of ports and devices for custom I/O operations.[22][21][20] BASIC-80 saw significant adoption in early business microcomputers, notably powering the Osborne 1 portable system released in 1981, where it served as the primary programming environment under CP/M for tasks like spreadsheet automation and custom applications. Licensing fees for BASIC-80 varied by version, with the Disk edition priced at over $300 per copy in the late 1970s and early 1980s, reflecting its value as a professional tool bundled with hardware from manufacturers seeking reliable software ecosystems.[23][24]Platform-Specific 8-Bit Versions
Microsoft BASIC implementations for 8-bit home computers were tailored to leverage specific hardware features, integrating platform-unique commands while building on core language elements like variables, loops, and string handling. These adaptations, developed between 1977 and 1983, enabled seamless interaction with proprietary peripherals such as keyboards, displays, and storage devices on systems with limited RAM, typically 16 to 64 KB.[25][26] For the Tandy TRS-80 series, Microsoft licensed Level II BASIC to Radio Shack in 1978 for the Model I, occupying 12 KB of ROM and introducing advanced string functions such as LEFT, RIGHT, and MID$ for text manipulation, alongside support for double-precision variables and IF-THEN-ELSE statements.[25] This version marked a significant upgrade from Tandy's initial 4 KB Level I BASIC, emphasizing user-friendly programming for business and hobbyist applications on Z80-based systems. Level III BASIC, released later in 1978 as a 5.2 KB cassette extension for the Model I, added assembly language integration through DEFN and DEFUSR commands, allowing direct machine code calls for performance-critical routines, though it lacked native disk support—requiring separate TRSDOS extensions for file operations on later models like the 1979 Model II.[27] Texas Instruments' 1979 TI-99/4 console incorporated a Microsoft-derived Console BASIC in ROM, which was expanded via the optional Extended BASIC cartridge to support the system's 16 KB RAM and TMS9918 video processor. This adaptation introduced sprite graphics commands for handling up to 32 movable objects on screen, along with subprogram calls (SUB and CALL) for modular code, and integration with the Peripheral Expansion Box for speech synthesis using the TMS5220 chip—enabling voice output through simple SAY statements. Hardware-specific extensions included CALL CHAR, which redefined the 8x8 pixel character patterns in video memory for custom sprites or fonts, optimizing the 16-color palette for games and educational software.[28][29] Commodore's PET series launched in 1977 with an 8 KB Microsoft BASIC implementation in ROM, providing core arithmetic and I/O functions tailored to the all-in-one design's 9-inch monochrome display and chiclet keyboard, with optional high-resolution graphics via a 1982 add-on board using the EF936x chip for 512x512 pixel plotting.[26][30] This BASIC evolved into the VIC-20's 1980 version, licensed from Microsoft for under $300 retail, adding color support (16 hues) and sound commands like SOUND for the 6520 VIA chip, while managing 5 KB usable RAM through memory-peeking PEEK and POKE. By 1982, the Commodore 64's BASIC V2 built on this lineage with 64 KB RAM allocation, enabling access to advanced hardware features such as sprite multiplexing and SID chip audio through low-level POKE and PEEK commands to control the VIC-II and SID registers, though third-party enhancements often extended the Microsoft-licensed core for advanced bitmap graphics.[26][31] These versions differed primarily through hardware-tied commands—such as the TRS-80's INKEY$ for keyboard polling or Commodore's GRAPHIC modes for PETSCII block drawing—while sharing memory management via the CLEAR command, which erased variables and reserved stack space (e.g., CLEAR 1000 allocating 1 KB for arrays in 16-64 KB systems) to prevent overflows in constrained environments. By 1980, Microsoft BASIC held dominance in the 8-bit home computer market, powering over half of shipped units across leading platforms like the TRS-80, PET, and TI-99/4, fostering a unified programming ecosystem amid fragmented hardware.[31][25]6502 and Other Microprocessor Variants
Microsoft developed a version of BASIC for the 6502 microprocessor in 1977, targeting early microcomputers like the Apple II. This interpreter, known as 6502 BASIC, was initially licensed to Apple Computer, where it formed the basis for Applesoft BASIC after modifications by Apple engineer Randy Wigginton, including the addition of support for the system's high-resolution graphics and other hardware-specific features.[32][33] Unlike Apple's original Integer BASIC, which focused on integer operations, the Microsoft-derived version enabled more advanced scientific and graphical programming on the Apple II platform.[32] The 6502 BASIC was also adapted for the Atari 400 and 800 computers, released in 1979, where it became Atari BASIC. This port included specialized commands for the Atari's hardware, such as support for player-missile graphics (sprites) via commands like GRAPHICS and PMCOLOR, and sound generation through SOUND statements that controlled the POKEY chip's four channels. These features allowed programmers to create interactive games and multimedia applications directly in BASIC without low-level assembly. Microsoft extended its BASIC implementations to other non-8080 architectures, including the Motorola 6800 with BASIC-68 in 1977 and the 6809 with BASIC-69. BASIC-68 provided a standard interpreter for 6800-based systems, compatible with the FLEX operating system and supporting core BASIC-80 features like string handling and disk I/O.[24] BASIC-69, targeted at the enhanced 6809 processor, similarly integrated with FLEX and was used in machines like the Dragon 64, offering improved performance through the 6809's advanced instruction set.[34][24] Porting BASIC to these architectures involved significant technical challenges in the late 1970s, as Microsoft initially wrote the core in 8080 assembly and used automated conversion tools to generate target-specific code, resulting in less optimized implementations for the 6502 and 6800 families compared to native development.[35] These ports typically fit into 8-16 KB ROM footprints to accommodate limited hardware, with the 8 KB version providing essential floating-point support and the larger variants adding extended features.[35][36] Input handling was tailored to each platform, including support for paddle and joystick devices; for instance, Applesoft BASIC used the PDL function to read analog paddle positions for game controls, while Atari BASIC incorporated direct joystick port access via STICK statements.[37] In a significant 2025 development, Microsoft released the source code for 6502 BASIC Version 1.1 on September 4 via GitHub, making the 1978-era assembly available for study, emulation, and modern adaptations under an open-source license.[33][36] This release highlights the interpreter's historical role in popularizing BASIC on 6502 systems and enables developers to explore its original structure, including the REPL and tokenization mechanisms.[36]16-Bit and Advanced System Implementations
BASIC-86 and MS-DOS Evolutions
Microsoft BASIC transitioned to 16-bit architectures with the release of BASIC-86 in 1980, targeted at the Intel 8086 microprocessor. This interpreter extended the features of the earlier BASIC-80 while adapting to the 16-bit environment, available in Extended, Disk, and Standalone variants that operated without an underlying OS for embedded use. To overcome the 64 KB segment limitation inherent to the 8086's real-mode addressing, BASIC-86 incorporated overlay support through the CHAIN statement with the MERGE option, permitting dynamic loading of subroutines to extend program size beyond the base memory constraint. BASIC-86 also introduced enhancements such as support for variable names up to 40 characters and advanced error handling via the RESUME statement, alongside full compatibility with both 8086 and 80286 processors.[24][38][20] In 1982, Microsoft evolved its offerings with MBASIC for CP/M-86, a port of the established interpreter to Digital Research's 16-bit OS, emphasizing business-oriented capabilities including ISAM (Indexed Sequential Access Method) file handling for efficient record-based data management. Concurrently, the Microsoft BASIC Compiler was released that year, enabling the creation of standalone executables from BASIC-86 source code, which improved runtime performance and allowed distribution without the interpreter, suitable for both CP/M-86 and emerging DOS platforms. These developments facilitated more robust application development, with the compiler supporting optimizations like code segmentation to manage memory efficiently. BASIC-86 and its evolutions preserved backward compatibility with 8-bit BASIC-80 syntax, easing migration of existing programs to 16-bit systems.[39][40][41] The integration of BASIC-86 derivatives into MS-DOS marked a pivotal step in personal computing, beginning with BASICA in 1983, bundled with IBM PC DOS 2.0 to provide a full-featured interpreter for the IBM PC and XT models. BASICA enhanced graphics and display capabilities, incorporating support for multiple screen modes via ANSI.SYS and extending compatibility to EGA and VGA adapters in subsequent updates, enabling richer visual applications on evolving hardware. As a standard component on early PCs, BASICA and related tools became essential for business software, supporting integrations like dBase database file access through compatible I/O operations, which powered early productivity suites and custom enterprise solutions.[42][43]MSX and Embedded System Versions
MSX BASIC, introduced in 1983 as part of the MSX standard developed jointly by Microsoft and ASCII Corporation, served as the primary programming environment for the MSX1 home computer platform.[44] This implementation occupied 32 KB of ROM and extended the core Microsoft BASIC dialect with dedicated commands for hardware integration, including sprite manipulation via SPRITE and PUT SPRITE statements for the Texas Instruments TMS9918A Video Display Processor (VDP), sound generation using the General Instrument AY-3-8910 Programmable Sound Generator (PSG) through PLAY and SOUND instructions, and support for peripherals like joysticks and printers.[45] These features enabled users to create multimedia applications and games directly in BASIC, leveraging the MSX's sprite engine for up to 32 hardware sprites and PSG for three-channel polyphonic sound with noise effects.[46] Subsequent enhancements appeared with the MSX2 standard in 1985, where MSX BASIC version 2.0 introduced support for the Yamaha V9938 VDP, enabling 256-color palettes, multicolored sprites with up to 16 colors per sprite, and hardware-accelerated operations such as line drawing, filling, and bit-block transfers via commands like LINE, PAINT, and PRE SET.[45] Version 3.0, bundled with MSX2+ machines released in 1988, further expanded capabilities with 32 KB ROM (including bank-switching for the additional 16 KB) and integration for MegaROM mappers, allowing BASIC programs to access larger memory spaces in cartridges for complex applications exceeding standard limits.[47] These updates maintained backward compatibility while transforming BASIC into a tool for advanced graphics and extended program sizes, facilitating development on evolving MSX hardware. Beyond standard MSX computers, Microsoft BASIC variants found use in embedded systems. Similarly, the Yamaha CX5M music computer, an MSX-based system released in 1984, incorporated MSX BASIC with MIDI extensions through cartridges like the SFG-05, enabling commands for FM synthesis control and Music Macro Language (MML) integration to sequence MIDI data and generate music directly in programs.[48] These adaptations highlighted BASIC's versatility in specialized embedded environments, such as music production and clone hardware. Technically, MSX BASIC ran on the Zilog Z80 microprocessor at 3.58 MHz, building on the structured programming elements of earlier dialects like support for GOSUB/RETURN for subroutines and compatibility with Microsoft BASIC 4.5 syntax, allowing porting of code from prior 8-bit systems.[45] This Z80 foundation ensured efficient execution of graphics and sound routines without requiring assembly, though advanced users could intermix machine code via USR calls. The MSX platform's success, driven by these BASIC implementations, resulted in over 5 million units sold worldwide, with strong adoption in Japan and Europe, where it popularized BASIC as an accessible entry point for multimedia programming and game development among hobbyists and educators.[49]Compilers and Standalone Editions
In the early 1980s, Microsoft developed the BASIC Compiler, initially released as BASCOM 1.0 in March 1982 for the Intel 8086 processor, specifically tailored for the IBM PC. This compiler targeted professional developers seeking to create standalone executables from BASIC source code, producing .EXE files through integration with the Microsoft LINK utility. Version 2.0 followed in 1985, extending support for enhanced optimization and modular programming on MS-DOS systems.[39][50][51] The BASIC Compiler inherited its core syntax from BASIC-86 while introducing compilation-specific enhancements, such as optimization flags (/O for runtime elimination and /D for debug information) that reordered expressions to reduce code size and improve execution speed. It supported modular development by generating relocatable object (.OBJ) files, allowing linkage of multiple modules and integration with libraries like BASCOM.LIB for core functions or BASRUN.LIB for runtime support. Key features included compile-time type checking enforced via DEFtype statements to prevent data mismatches, inline assembly integration through CALL ABSOLUTE for machine-language subroutines, and runtime libraries handling mathematics, graphics, and I/O operations. However, early versions lacked dynamic memory allocation, requiring fixed array dimensions declared with DIM statements (up to 60 dimensions), and imposed a 64 KB limit per code segment, constraining larger programs to segmented architectures addressable via DEF SEG.[52][39] Standalone editions of Microsoft BASIC extended its reach to non-disk-based environments, particularly through ROM-based implementations for embedded systems. For instance, the TI-99/4A console featured a built-in ROM version of Microsoft BASIC (developed under contract in 1979-1981), providing an ANSI-compliant interpreter for graphics, sound, and file access directly from 26 KB of console ROM without requiring external media. Cartridge-based variants, such as the IBM PCjr Cartridge BASIC (1984), offered a self-contained 64 KB ROM edition that booted independently, supporting enhanced commands for the PCjr's memory and peripherals. These editions prioritized portability for educational and hobbyist use but shared the compiler's limitations on memory and allocation.[53][54] These compilers and standalone editions facilitated professional development of games, utilities, and applications on PCs and embedded devices, where compiled .EXE files or ROM cartridges allowed distribution without an OS-dependent interpreter, though adoption waned by 1988 as integrated development environments like QuickBASIC emerged.[39][55]Modern Evolutions and Descendants
GW-BASIC and QBasic
GW-BASIC, released in 1983 as part of MS-DOS 2.0, served as a graphics-enhanced interpreter for non-IBM compatible DOS-based PCs, extending the capabilities of earlier Microsoft BASIC variants like BASICA by operating independently of ROM-based systems.[39] It supported Color Graphics Adapter (CGA) modes such as 320x200 with 4 colors and 640x200 with 2 colors, as well as Enhanced Graphics Adapter (EGA) modes including 640x350 with up to 64 colors, enabling rudimentary vector graphics through commands like LINE for drawing lines and boxes (e.g., LINE (x1,y1)-(x2,y2)) and CIRCLE for ellipses (e.g., CIRCLE (xcenter,ycenter), radius).[56] Joystick input was handled via STICK for coordinate reading and STRIG for trigger detection, while sound generation included the SOUND statement for tones (37-32,767 Hz) and the PLAY command for music using a macro notation system (e.g., PLAY "C D E" for notes).[56] In 1986, enhancements to GW-BASIC were introduced for the Tandy 1000 series, integrating with Tandy's customized MS-DOS 3.20 to leverage the system's built-in three-voice sound and improved graphics, including support for Tandy's Digital Data Adapter for enhanced color palettes and DMA-based audio without requiring additional hardware.[57] QBasic, introduced in 1991 with MS-DOS 5.0 and later versions, represented a structured evolution of Microsoft BASIC interpreters, bundled as a free tool to replace GW-BASIC and provide an accessible entry point for programming under DOS.[39] It featured an integrated development environment (IDE) with mouse support, a menu-driven interface, and split-screen editing, allowing direct source code manipulation without tokenization.[58] SCREEN modes were expanded for compatibility with CGA, EGA, and VGA displays, such as SCREEN 1 (320x200, 4 colors) and SCREEN 13 (320x200, 256 colors), facilitating graphics programming with the same LINE and CIRCLE commands, while PLAY retained music notation support.[59] Timeout functionality was incorporated in I/O operations, such as the OPEN statement's OP parameter for specifying response delays in milliseconds and SLEEP for pausing execution until keypress or a set duration, enhancing interactive program control; it also served as a lightweight version tied to the BASIC Professional Development System (PDS) 7.1, offering limited compilation via QuickBASIC subsets without full professional tools.[59][43] Unlike GW-BASIC's token-based storage, which compiled programs into binary tokens for execution and limited direct editing, QBasic preserved editable ASCII source files and supported modern constructs like line labels, user-defined types, and error trapping (e.g., ON ERROR GOSUB), making it more approachable for structured programming while maintaining backward compatibility with most GW-BASIC code.[58] Both interpreters endured as educational staples and tools for simple games—such as text adventures and graphical demos—through the MS-DOS era, remaining viable under Windows 95 via DOS compatibility modes and offering over 30 years of legacy support for hobbyist and introductory coding; in 2020, Microsoft open-sourced the GW-BASIC source code from 1983 under the MIT License to further preserve its historical role.[39][60]Visual Basic Lineage
Visual Basic 1.0, released in 1991 for Windows 3.0, introduced a revolutionary graphical development environment that allowed programmers to create user interfaces through drag-and-drop forms design, implement event-driven programming with handlers for user interactions, and integrate with Object Linking and Embedding (OLE) for component-based development.[61][61][61] Subsequent versions from Visual Basic 2.0 (1992) to 6.0 (1998) built on this foundation, enhancing support for database connectivity with Data Access Objects (DAO) and ActiveX Data Objects (ADO), while introducing ActiveX controls for reusable components and advanced features like multiple document interface (MDI) forms and 32-bit compilation in later iterations.[62][62][63] Visual Basic .NET, launched in 2002 as part of the .NET Framework, marked a significant shift to a fully object-oriented language with automatic garbage collection for memory management, improved syntax compatibility with earlier BASIC variants like QBasic, and integration into the Common Language Runtime for cross-language interoperability.[64][65][64] In parallel, Visual Basic for Applications (VBA), introduced in 1993 for automating Microsoft Office macros, extended the language's reach into productivity tools, enabling scripted customization across applications like Excel and Word.[66] For educational purposes, Microsoft released Small Basic in 2008, a simplified interpreter designed to introduce beginners to programming concepts with a focus on ease and creativity.[67] Later enhancements in Visual Basic 2010 and beyond incorporated modern language features such as async/await for asynchronous programming, facilitating efficient handling of concurrent operations in applications; as of 2025, Visual Basic (VB.NET) continues to be supported within the .NET ecosystem as a stable language for developing modern applications, though Microsoft has stated no new major features are planned, with focus on C# for innovations.[68][64] Visual Basic's emphasis on rapid application development (RAD) empowered millions of developers—over 3.2 million by the late 1990s—to build business tools and desktop applications quickly, significantly influencing enterprise software creation.[63][62] However, mainstream support for Visual Basic 6.0 ended on April 8, 2008, prompting a migration to .NET-based versions amid evolving platform demands.[69]Source Code Releases and Legacy
Early Source Releases
Prior to official releases, community efforts contributed to the preservation of early Microsoft BASIC code through disassemblies and analyses. For instance, in 2019, an annotated disassembly of Altair BASIC 3.2 (the 4K version) was published on GitHub, providing insights into the original 1975 assembly code developed by Bill Gates, Paul Allen, and Monte Davidoff.[70] This work, based on scans from historical sources, included detailed 8080 assembly listings and supported emulation in tools like the SIMH Altair simulator.[71] These community initiatives enabled reverse-engineering, bug fixes, and ports to modern environments, sustaining interest in retrocomputing. Hobbyists adapted the disassembly for FPGA recreations and web emulators, preserving 1970s programming practices.[72][73]Recent Open-Sourcing Initiatives
In 2020, Microsoft released the source code for GW-BASIC, a key DOS-era BASIC interpreter closely related to QBasic, as part of broader efforts to share historical software artifacts alongside MS-DOS 1.25 and other early tools on GitHub.[60] This release included the 8088 assembly language sources from February 1983, aimed at providing educational insight into early personal computing software without accepting modifications or pull requests.[74] The initiative built on prior archival efforts by offering pure assembly code for program execution, input/output, and floating-point operations, with notes for building in emulators like DOSBox.[75] In April 2025, to celebrate Microsoft's 50th anniversary, Bill Gates published the original source code for Altair BASIC (Microsoft's first product from 1975) as a 314-page PDF listing on his personal site.[7] This release featured the full 8080 assembly code with original developer comments, enabling study of the interpreter's structure and historical context. Motivations included honoring the company's origins and inspiring new generations with computing history; the code supports assembly and running in period-accurate emulators.[76] Building on this momentum, Microsoft open-sourced the complete source code for Microsoft BASIC Version 1.1 for the 6502 microprocessor on September 4, 2025, under the permissive MIT license.[36] This 1978 interpreter, originally developed by Bill Gates and Ric Weiland, powered early systems like the Apple II, Commodore PET, and KIM-1, serving as a foundational precursor to later variants such as Applesoft BASIC.[33] The GitHub repository contains the full 6,955-line assembly source file (m6502.asm) with conditional compilation flags enabling cross-platform adaptations for historical hardware targets.[36] The 2025 release modernizes access to this legacy code by supporting emulation and simulation environments, such as PDP-10 for testing, while encouraging community forking for retro development and experimentation.[77] Microsoft's stated goals emphasize preserving computing history, enabling study of early programming paradigms, and fostering interest in retro gaming and hardware replication among developers and enthusiasts.[5]Derivatives and Broader Influence
Licensed Third-Party Variants
Microsoft licensed its BASIC interpreter to third-party hardware manufacturers, enabling customized adaptations for specific proprietary systems while retaining core syntax elements derived from earlier versions like BASIC-80.[78] These variants typically involved royalties paid to Microsoft on a per-unit basis for each system sold containing the software, with licensees receiving compiled binaries but limited or no access to the full source code to protect intellectual property.[79] One prominent example is Amiga BASIC, released in 1985 for the Commodore Amiga 1000 computer. Developed by Microsoft, this interpreted BASIC implementation integrated Amiga-specific extensions, including primitives for the Intuition graphical user interface such as theWINDOW, MENU, and MOUSE statements for handling resizable windows, drop-down menus, and mouse input. It also supported the Amiga's blitter hardware for accelerated graphics operations through OBJECT commands, allowing creation and animation of blitter objects (bobs) with collision detection via OBJECT.HIT and COLLISION functions.[78]
Similarly, ST BASIC, introduced in 1985 for the Atari ST line of computers, adapted Microsoft BASIC to leverage the system's GEM environment. This variant provided access to GEMDOS for file operations and AES (Application Environment Services) for window management, using numerical calls to VDI (Virtual Device Interface) and AES routines to enable graphical interfaces compatible with the ST's TOS operating system.[80][81]
Other licensed variants included Extended Color BASIC for the Tandy Color Computer, first available in 1980 as an optional 16 KB ROM upgrade. Based on Microsoft BASIC, it added support for the CoCo's hardware, notably joystick input through the JOYSTK function, which reads analog positions (0-63 range) from connected joysticks for interactive graphics and games.[82] These licensed adaptations demonstrated the versatility of Microsoft's BASIC, with some persisting into the 1990s through ongoing support on platforms like the Amiga, where ports and emulations such as those in Amiga Forever maintained compatibility for legacy software.[83]