Fact-checked by Grok 2 weeks ago

Small-C

Small-C is a minimal subset of the C programming language designed for resource-limited environments such as 8-bit microcomputers and embedded systems, accompanied by a self-hosting compiler that produces assembly code from source programs. Developed by Ron Cain, the original version targeted the Intel 8080 processor and was published as a public-domain project in the May 1980 issue of Dr. Dobb's Journal. The language emphasizes simplicity, supporting core elements like integer and character data types, one-dimensional arrays, functions with parameters and return values, and basic control structures including if, while, and later additions such as for loops and switch statements. Small-C omits advanced C features to facilitate implementation on constrained hardware, excluding structures and unions, floating-point or double-precision arithmetic, multi-dimensional arrays, directives like #if, and beyond a single level. It assumes that integers and pointers share the same size and alignment, enabling efficient for systems with limited memory, typically under 64 KB. The operates in a single pass, incorporating optimizations in later versions, and includes a for standard input/output and bitwise operations. Following its debut, Small-C was enhanced by contributors including James E. Hendrix, who released version 2.1 in 1984 with improved optimization, support for multiple architectures like the Z80, 6800, 6809, 8086, and 68000, and a companion book The Small-C Handbook. Version 2.2 appeared in 1988, adapted for PC-DOS on the 8086. Its public-domain status spurred widespread ports and derivatives for hobbyist , educational purposes, and early development, influencing the proliferation of C on non-mainframe platforms during the . Modern revivals, such as those on , maintain compatibility while adding minor extensions like comments and unsigned types for contemporary experimentation.

History

Origins and Development

In the late 1970s and early 1980s, the proliferation of affordable microcomputers equipped with processors like the Intel 8080 and Zilog Z80 fueled a growing need for lightweight programming languages that could deliver the structured, portable code of C without demanding excessive resources. These systems, commonly running the CP/M operating system, were constrained by modest hardware capabilities, including RAM limited to 64 KB or less in many configurations, which rendered full-scale C compilers infeasible for hobbyists and developers working on resource-scarce platforms. Small-C emerged as a response to this environment, offering a minimal dialect of C tailored for such machines. The origins of Small-C trace back to May 1980, when Ron Cain published "A Small C Compiler for the 8080s" in , introducing an initial prototype written in a subset of C itself and targeted at the 8080 microprocessor. James E. Hendrix then took over development the following year, expanding and refining Cain's draft into a more robust tool suitable as both a teaching aid for programming concepts and a practical for small-scale systems. Hendrix's efforts built directly on the public-domain foundation laid by Cain, focusing on environments like to enable broader accessibility among early users. The core motivations for Small-C's creation centered on drastically simplifying compiler design to operate within the tight memory limits of contemporary —typically under 64 KB—while upholding C's key strengths in portability across architectures and support for paradigms. This approach allowed the to self-host on systems, minimizing the need for larger setups and democratizing C-like for non-professional programmers. Early development involved rapid prototyping, starting with Cain's basic implementation and progressing through Hendrix's iterations, which incorporated practical enhancements drawn from feedback in hobbyist forums and publications such as Dr. Dobb's Journal. These refinements addressed real-world usability issues reported by the microcomputer community, ensuring the tool's evolution aligned with the demands of constrained computing without overcomplicating its minimalist ethos. Small-C's inception predated the formalization of the ANSI C standard in the mid-1980s, prioritizing immediate applicability over comprehensive standardization.

Initial Release and Early Adoption

The Small C compiler was initially introduced by Ron Cain in the May 1980 issue of Dr. Dobb's Journal, presenting a compact implementation targeting the Intel 8080 microprocessor and suitable for early microcomputers. A companion runtime library was published by Cain in the June 1980 issue. James E. Hendrix then enhanced this foundation, publishing an article on refinements to the expression analyzer in the December 1981 issue of the same journal. This public domain release facilitated widespread access, aligning with the growing interest in C following the 1978 publication of Kernighan and Ritchie's The C Programming Language. In 1984, Hendrix published The Small C Handbook, a detailed guide that documented the language subset, compiler internals, and usage examples, solidifying Small C's role as an educational and practical tool for programmers. The compiler's modest footprint—its spanning approximately 30 KB—allowed it to fit on limited storage media like floppy disks and operate on systems with as little as 48 KB of , making it ideal for the era's resource-constrained . Early adoption was driven by its inclusion in public domain software distributions for operating systems such as and , as well as early , enabling hobbyists to create custom applications without commercial licensing barriers. By the mid-1980s, the had gained traction among enthusiasts for developing utilities and games on 8-bit and 16-bit platforms, with its portability encouraging ports to additional architectures. Community engagement further propelled its spread, as users shared bug fixes, performance optimizations, and minor extensions through magazines like and local user groups, contributing to iterative improvements documented in subsequent issues up to 1985. These efforts highlighted Small C's appeal in democratizing C programming for non-professional developers during the personal computing boom.

Design Principles

Core Language Subset

Small-C's core language subset provides a streamlined dialect of C, focusing on fundamental constructs for efficient on limited . The primary types in the original version are integers (), which are 16-bit signed in form, and characters (), which are 8-bit and sign-extended to 16 bits during arithmetic operations, with no inclusion of floating-point types like or . Later versions added support for unsigned integers. These types support basic arithmetic, logical, and relational operators, ensuring compatibility with the integer-based architecture of target systems such as the 8080 microprocessor. The original control structures include conditional branching via if and if-else statements and iteration through while loops, with compound statements using curly braces. Later versions (e.g., 2.1) added do-while and for loops, as well as multi-way selection with switch statements including case labels, a default case, and break statements to prevent fall-through. Functions form a key element, returning only integers via a dedicated and accepting any number of arguments passed by value on the or by reference using pointers, with full support for limited by available stack depth. Automatic local variables are allocated on the . Pointers are restricted to and varieties, facilitating with the * , address computation via &, and arithmetic increments/decrements scaled to the pointed-to type (e.g., +2 for ). Arrays are confined to one dimension, declared as type name[] or with fixed sizes like type name[constant], and treated interchangeably with pointers for access and manipulation. Input/output relies on primitive routines such as getchar for reading characters and putchar for writing them, enabling basic console interaction without higher-level formatting. The syntax mirrors the K&R C style of 1978, with variable declarations permitted at the start of blocks after labels, no function prototypes required, and statements terminated by semicolons in a recursive-descent model. The original emphasizes single-file source compilation with no , obviating the need for separate header files and promoting simplicity in development for standalone programs. Later versions introduced basic #include support. This subset upholds C's foundational aim of portability across machines by prioritizing a compact, semantically consistent core. Example: Basic "Hello World" Program The absence of printf in the core subset necessitates custom output routines, as illustrated in this representative program using a pointer to traverse a array:
c
main() {
    char *msg = "Hello, World!\n";
    while (*msg) {
        putchar(*msg++);
    }
}
This code leverages a for iteration, pointer dereferencing and increment, and the putchar function for output, compiling to efficient assembly on supported platforms.

Key Simplifications and Omissions

Small-C deliberately excludes several advanced features of full C to maintain its minimal footprint, including structures, unions, enumerated types, and typedef declarations, which are absent to avoid the need for complex type handling in the compiler. Multi-dimensional arrays are not supported beyond one-dimensional forms, limiting array declarations to simple linear structures. Additionally, there is no support for floating-point data types or operations, restricting arithmetic to integers only, and dynamic memory allocation functions such as malloc and free are omitted, forcing reliance on static allocation. The original version has no preprocessor; later versions support only basic #include directives without macros, conditional compilation, or other directives that would increase parsing overhead. To further simplify implementation, Small-C adopts several syntactic and semantic reductions: all functions implicitly return an unless explicitly declared otherwise, eliminating the need for return type specifications in most cases. Function prototypes and argument type checking are not provided, relying instead on K&R-style function definitions where parameter types follow the parameter list. Variable scope supports globals and automatic locals on the , but omits static local variables. Integers are fixed at 16 bits on typical targets like the 8080 or Z80 processors. These choices streamline the single-pass design, reducing the codebase to under 3,000 lines and minimizing overhead. These omissions and simplifications stem from the goal of targeting resource-constrained environments, such as microcomputers with less than 64 KB of total memory, where full C features would demand excessive parser complexity and generate bloated code unsuitable for 8-bit systems. By focusing on integer arithmetic, basic control structures like if-else and while loops, and simple expressions, Small-C achieves a compact executable size while preserving essential programmability. As a strict subset of K&R C, Small-C programs can generally be compiled in full C compilers with minor modifications, such as adding explicit return types or replacing omitted constructs with equivalents, ensuring portability upward without violating core C semantics. For details on feature evolution, see the History section.

Implementations and Variants

Original Compiler

The original Small-C compiler, developed by Ron Cain and first published in Dr. Dobb's Journal in May 1980, employed a single-pass architecture to enable efficient compilation on resource-constrained hardware. This design integrated a basic lexical analyzer for tokenization, a for syntax analysis, and a straightforward code generator that produced for the (and compatible Z80) processor. The lexical analyzer scanned input character by character using functions such as inline() and gch(), handling tokens via utilities like blanks(), inbyte(), and symname(), while the parser utilized hierarchical functions including statement(), doif(), and dofunction() to process the language's subset without . The code generator output assembly instructions directly, with optional via peep() to refine the code for better performance. The was written in the Small-C language itself, making it self-hosting after an initial bootstrap phase that involved assembling key components in or using an existing C compiler on a like Unix. Once bootstrapped, it could compile its own to produce updated versions, with the build process relying on a simple main entry point and source files divided into modules (e.g., CC1.C through CC4.C). This relocatable design allowed for straightforward maintenance and extension, producing that could be linked into binaries. The core spanned approximately 3,000 lines, which facilitated its use on systems with limited memory. Performance was notably swift for the era, with a simple program compiling in mere seconds on 8080-based machines running . The output consisted of human-readable code in ASCII , compatible with standard assemblers such as those from or , which could then be assembled and linked into relocatable COM files for execution or equivalent formats for other environments. This generated targeted direct 8080 opcodes, ensuring minimal overhead and compatibility with the target architecture's constraints.

Ports to Other Platforms

Early ports of the Small-C compiler in the focused on adapting it to popular 8-bit microcomputers, leveraging its simple single-pass design for retargeting to Z80-based systems through cross-compilers that generated Z80 assembly code. These adaptations enabled compilation of Small-C subsets directly for these platforms, supporting educational and hobbyist programming on resource-constrained hardware. A notable variant was James E. Hendrix's 1984 implementation of Small-C version 2.1 for , which served as a cross-compiler running on PC compatibles to target 8080/Z80 code, marking one of the first ports to 16-bit x86 environments while preserving the compiler's minimal footprint. In the 1990s, public domain efforts extended Small-C to the 6502 architecture more robustly, with projects such as cc65, a optimizing compiler based on Small-C, providing support for systems such as the Commodore 64 and , emphasizing portability across 8-bit ecosystems. Modern ports continue to maintain Small-C for 8-bit targets, exemplified by the DosWorld/smallc repository, which collects and preserves original for historical and retro computing use, including Z80 and 8080 variants. These efforts often integrate with retro computing emulators, such as those for systems, facilitating development and testing without physical hardware. Porting challenges have included retargeting backend code generators for architectures like the , as seen in SmallC68 implementations, and limited subsets for embedded systems, with optimizations focused on reducing generated code size to fit constrained memory.

Applications and Usage

Educational and Hobbyist Contexts

Small-C's simplicity and self-hosting capability made it a valuable tool in 1980s education, particularly for courses on construction, where students could study and modify its full to understand , , and optimization processes. The 's single-pass design and subset of C features allowed real-time compilation from keyboard input, enabling hands-on learning of C basics and assembly output without the complexity of full C implementations. Educational projects often involved extending the , such as adding support for long integers, stack probes, or argument verification, as demonstrated in semester-long assignments at institutions like Clarkson College, where ports to platforms like served as practical case studies. In hobbyist communities, Small-C gained popularity for DIY on resource-limited 8-bit systems, appealing to enthusiasts who valued its compact size and ability to compile itself for iterative experimentation. Originally published in in May 1980 by Ron Cain, the compiler targeted microcomputers and inspired hobbyists to build utilities like text formatters and filters directly on hardware without requiring full C toolchains. Its self-hosting nature facilitated modifications, such as optimizing expression evaluation or enhancing back-end code generation, allowing users to create custom tools for personal projects. Resources like James E. Hendrix's The Small-C Handbook (1984) provided detailed tutorials for beginners, walking through the compiler's internals and offering guidance on and extending it for hobbyist applications. These materials, building on Cain's original work, emphasized practical enhancements, such as word alignment or optimizer loops, fostering a hands-on approach that aligned with Small-C's key simplifications for quick learning.

Embedded and Resource-Constrained Systems

Small-C's ports to architectures like the Z80 for systems supported its use in resource-limited environments with minimal memory, such as those under 64 KB . A 1999 implementation extended Small-C for AVR chips, facilitating task dispatchers in embedded applications like switch debouncing and timed . These examples demonstrated its suitability for low-power, memory-constrained systems, with advantages including minimal overhead and a lightweight . Practical limitations in hardware interfacing often required workarounds for Small-C's omissions, such as using extensions for handling, since the subset lacks built-in support for low-level peripherals.

Legacy and Influence

Impact on C Subsets

Small-C's single-pass and compact design for a minimal C subset influenced the development of later small-scale C compilers and dialects, particularly those aimed at educational, hobbyist, and embedded applications. The (TCC), released by in 1999, implements a single-pass approach to enable fast compilation of C code on resource-limited platforms, resulting in an under 100 for x86 systems. Beyond direct derivatives, Small-C demonstrated the practical viability of restricted C subsets for microcomputers and systems, contributing to broader acceptance of minimal dialects in safety-critical domains. Small-C's success in targeting 8-bit processors like the underscored the potential for C in constrained environments, shaping guidelines that prioritize portability and reliability over full language expressiveness. A key legacy of Small-C lies in its release, which lowered barriers to modification and redistribution, fostering a wave of open-source C subsets and retargetable compilers for legacy 8- and 16-bit architectures. Ports to platforms such as Z80, 6502, and proliferated in the and , enabling hobbyists and educators to adapt the compiler for diverse microsystems without licensing restrictions. Its retargetable model—using direct output with backend adaptations—influenced subsequent designs for cross-platform minimal compilers, emphasizing for low-resource targets. The work's enduring impact is evident in its frequent citations within technical literature on compiler construction and minimal programming languages from the mid-1980s to 2010, serving as a for implementing functional yet lightweight C variants in academic and practical contexts.

Modern Interpretations and Revivals

In the , community efforts focused on preserving and archiving the original Small-C codebase for retro computing and purposes. The DosWorld/smallc repository, established around 2017, collects untouched from various Small-C versions, including Small C 2.2 and associated tools like the Small Assembler and VAL linker, to facilitate historical study and of 1980s-era and environments. This preservation work supports running Small-C programs in modern emulators, enabling hobbyists to experiment with period-accurate without hardware constraints. A notable occurred in the with the ncb85/SmallC-85 project, which resurrects Ron Cain's original after over three decades of dormancy. Updated in 2025, this builds on Chris Lewis's UNIX and introduces modern enhancements such as GCC-compatible structures, C99-style one-line comments, initialization, unsigned types, ANSI function declarations, and support for 8085-specific instructions like LHLX and ARHL, while generating assembler output for platforms including 8080, 6809, and M68K. These additions maintain Small-C's minimalist ethos but extend its usability for contemporary retro projects and self-hosting . Community forks have also incorporated basic extensions like structs and unions to broaden applicability without compromising core simplicity. For instance, PhrozenC, a K&R C compiler derived from Small-C base code, targets the Amstrad CPC and runs natively on the platform via ROM or cartridge, with source code released publicly in June 2025 to encourage further development in 8-bit demoscene and educational coding. Similarly, cc65, originally enhanced from Small-C by James E. Hendrix, remains actively maintained for 6502-based embedded systems, supporting modern applications in FPGA recreations and resource-limited hobbyist devices. As of 2025, community activity thrives on forums like CPCWiki, where developers discuss PhrozenC optimizations for , and Reddit's r/Compilers, highlighting revivals like SmallC-85 for educational compiler studies. These efforts underscore Small-C's ongoing relevance in retro , educational tools, and minimalistic embedded prototyping, particularly for IoT-like subsets on legacy architectures.

References

  1. [1]
    APR90 A Survey Of CUG C Compilers
    Ron Cain's Small C Compiler v1.0, which debuted in the May 1980 issue of Dr. Dobb's Journal, was originally a very small subset of the C language. Small C has ...
  2. [2]
    ncb85/SmallC-85: Ron Cain's Small C public domain compiler ...
    Ron Cain's Small C public domain compiler revived after 30 years. - ncb85/SmallC-85.
  3. [3]
    A History of C Compilers - Part 1: Performance, Portability and ...
    May 5, 2024 · Download Small C Compiler and Other C Resources from Dr Dobb's Journal. The original compiler, written in Small-C for the Intel 8080 by Ron ...
  4. [4]
    Z80 History: The CPU That Will Never Die - Tedium
    May 11, 2024 · Why the Z80 CPU has endured for the last 48 years, and what we're going to do now it starts to finally show hints of retirement.
  5. [5]
    Z80 CP/M: History and Legacy and Emulation | TinyComputers.io
    Aug 19, 2023 · These devices, which emerged in the 1970s, were designed to be affordable and accessible for individual users, businesses, and small ...
  6. [6]
    A small C compiler [2. ed.] 9780934375887, 0934375887 ...
    Dobb's Journal ran an article entitled “A Small C Compiler for the 8080s” in which Ron Cain presented a small compiler for a subset of the C language. The most ...<|control11|><|separator|>
  7. [7]
    [PDF] Small-C Companion - From the Mind of Tim Swenson
    ... Small-C compiler was written by Ron Cain and appeared in Dr. Dobb's Journal in the. May 1980 issue. The title of the article was "A Small C Compiler for the ...
  8. [8]
    Small-C and YLink - GitHub
    The Small-C Compiler, Assembler, and Libraries were written by Jim Hendrix, building on on initial draft of the compiler by Ron Cain. These works were initially ...
  9. [9]
    The small-C handbook 9780835970129, 0835970124 - dokumen.pub
    The C programming language was developed in the early seventies by Dennis M. Ritchie of Bell Telephone Laboratories. It was designed to provide direct access to ...
  10. [10]
    Small-C - EDM2
    Mar 30, 2020 · Ron Cain: A Small C Compiler for the 8080s - Dr. Dobb's Journal, issue 45 (May 1980); Ron Cain: Runtime Library for the Small C Compiler - Dr.
  11. [11]
    The Small C Handbook 9780835970129 0835970124 - Compress
    which deals with the 8080 instruction set. Assembly languages offer a number of features to assist the programmer in his task. Two are of primary interest.
  12. [12]
    The Small C Handbook: Hendrix, James E. - Amazon.com
    Book overview. Introduces the version of the C programming language adapted for use with the 8080 microprocessor, discusses program translation concepts, and ...Missing: origins | Show results with:origins
  13. [13]
    MESCC / Mike's Enhanced Small C Compiler for CP/M - CPCWiki
    Aug 30, 2015 · MESCC / Mike's Enhanced Small C Compiler for CP/M. ... Main source code file is 30 Kb in size, but it uses some headers, etc.
  14. [14]
    SMALL C Files - Retroarchive.org
    SMALL C is a "C" language compiler that is available with source code. It is very easy to port to another CPU, and this has been done many times.
  15. [15]
    Full text of "Dr. Dobb's Journal - Vol 5" - Internet Archive
    ... A Small C Compiler for the 8080's Ron Cain 191 The C Programming Language D. M. Ritchie, S. C. Johnson, M. E. Lesk, B. W. Kernighan 201 Structured ...<|control11|><|separator|>
  16. [16]
    SMALL C Files
    SMALL C is a "C" language compiler that is available with source code. It is very easy to port to another CPU, and this has been done many times.Missing: early hobbyists
  17. [17]
    Small-C - Wikipedia
    Small-C is both a subset of the C programming language, suitable for resource-limited microcomputers and embedded systems, and an implementation of that subset.Missing: history | Show results with:history
  18. [18]
    Small-C compiler for Z80/TRS80, based on the Jim Hendrix SmallC
    Star 4. Small-C compiler for Z80/TRS80, based on the Jim Hendrix SmallC. 4 ... Add Small C 2.0 CP/M port by Tony McGrath. 5 years ago. smallc-21 · smallc-21.
  19. [19]
    Compilers and Languages - 6502.org
    CC65 - A descendant of Small C, this is a freeware C compiler for 6502-based systems from Ullrich von Bassewitz. LCC 65C816 [lcc-1.9-retargetable.tar.gz] - ...
  20. [20]
    cc65 - a freeware C compiler for 6502 based systems - GitHub
    cc65 is originally based on the "Small C" compiler by Ron Cain and enhanced by James E. Hendrix. Project founders. John R. Dunning: original implementation ...
  21. [21]
    DosWorld/smallc: Here is collection of original untouched ... - GitHub
    Small C repository. Collected at one place for historic purposes. This is original untouched source code (with the possible exception of any added errata.txt ...
  22. [22]
    Home |z88dk
    What is z88dk? z88dk is the only C and assembler development kit that comes ready out-of-the-box to create programs for over 100 z80-family (8080, 8085, ...Z88dk Is Dedicated To Z80... · Z88dk Is Flexible · Z88dk Is Easy To Use
  23. [23]
    linuxha/SmallC68: FLEX 6800 Small C compiler - GitHub
    SmallC68XX - Small C for the Motorola 68XX family under Linux. I am on a quest for a Small C compiler to support the various 6800/6803/6809/68000 boards I have.Missing: ARM | Show results with:ARM
  24. [24]
    trcwm/smallc_v1: Source code for the original Small C ... - GitHub
    This is the source code to the original Small-C as written by Ron Cain and published in Dr. Dobbs journal. It was reconstructed by correcting badly OCR-ed ...
  25. [25]
    I think the best first book is: James E. Hendrix, The Small-C ...
    I think the best first book is: James E. Hendrix, The Small-C Handbook, Reston 1984, ISBN 0-8359-7012-4. He explains every detail, goes through every ...
  26. [26]
    Farewell, Z80: A Pioneering Chip Clocks Out After 50 Years - Elnion
    Apr 20, 2024 · These embedded Z80s continued to find application in various industrial control systems, medical devices, and even modern-day appliances. Their ...
  27. [27]
    Zilog to end production of the Z80 after 48yrs
    May 27, 2024 · I suppose there must be hundreds of thousands of Z80 based industrial process controllers or highly specialised instruments (like Les's) ...
  28. [28]
    Home built Z80 computers - Google Groups
    It's a very simple, generic design, easy to build and modify; and it easily runs CP/M. -- Ring the bells that still can ring. Forget the perfect offering. There ...
  29. [29]
    Aug99: A Task Dispatcher for Embedded Systems - Jacob Filipp
    Most of the embedded controllers I've built over ... Small-C for AVR (http://www.shm .monash .edu .au ... Small-C extensions that turn global ...
  30. [30]
  31. [31]
    A Small-C cross-compiler for the IBM 1401
    Jul 9, 2015 · We decided to implement Small-C, a subset of C for very small and embedded systems, originally developed for the Intel 8080 by Ron Cain in 1980.
  32. [32]
    TCC : Tiny C Compiler - Fabrice Bellard
    Features · SMALL! You can compile and execute C code everywhere, for example on rescue disks (about 100KB for x86 TCC executable, including C preprocessor, C ...
  33. [33]
    Tiny C Compiler - Wikipedia
    TCC has a number of compiler-specific language features intended to improve its practicality, such as an optional memory and bound checker, for improved code ...
  34. [34]
    Smaller C download | SourceForge.net
    Aug 4, 2024 · Smaller C is a simple and small single-pass C compiler, currently supporting most of the C language common between C89/ANSI C and C99.<|separator|>
  35. [35]
    Smaller C - Hackaday.io
    May 2, 2015 · Currently, in the small memory model my compiler does not support integer/pointer types larger than 16-bit and there's no support for floating ...
  36. [36]
    MISRA C - Wikipedia
    MISRA C is a set of software development guidelines for the C programming language developed by The MISRA Consortium. Its aims are to facilitate code safety ...
  37. [37]
    MISRA C & MISRA C++ | Coding Standards For Compliance | Perforce
    MISRA provides coding guidelines for C and C++ for developing safety-critical systems, ensuring code is safe, secure, reliable, and portable.
  38. [38]
    History of compiler construction - Wikipedia
    Small-C by Ron Cain and James E Hendrix; Turbo Pascal, created by Anders Hejlsberg, first released in 1983. WATFOR, created at the University of Waterloo ...
  39. [39]
    The myth of the fall - Armed and Dangerous
    Mar 2, 2014 · There was also the Cain and Hendrix Small C compiler, which was both public domain and (somewhat) portable, long before gcc was a gleam in rms's ...
  40. [40]
  41. [41]
    Starting off a simple (the simplest perhaps) C compiler?
    Feb 28, 2010 · Also, here's another small compiler tutorial for Basic to x86 assembler compiler. Tiny C Compiler; Hendrix's Small C Compiler found here. Share.
  42. [42]
    Sources available of the K&R C compilator PhrozenC by NoRecess
    Jun 14, 2025 · PhrozenC v1.0 is a K&R C compiler (Dennis Ritchie and Brian Kernighan, it's not ANSI C) for Amstrad CPC and PC by NoRecess.
  43. [43]
    C compilers that run on the CPC? - CPCWiki
    Jul 22, 2018 · PhrozenC is an interesting one to check out. It's basically a Small-C compiler, so would be somewhat limited, though PhrozenC comes on ROM or ...Programming - CPCWiki forumProgramming in C on the CPC - CPCWikiMore results from www.cpcwiki.eu
  44. [44]
    What does it mean for a compiled language to have a runtime?
    Aug 6, 2024 · You might enjoy looking at Small C. It's been revived here. SmallC ... r/Compilers - I wrote a compiler backend from scratch. github. 94 ...