Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Special pages
Niidae Wiki
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Small-C
Page
Discussion
English
Read
Edit
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Subset of a programming language}} {{Distinguish|Small-c conservative}} {{Infobox software | name = Small-C | logo = | developer = Ron Cain, James E. Hendrix | released = {{Start date and age|1980}} | latest release version = | latest release date = | operating system = | genre = [[Compiler]] | programming language = [[C (programming language)|C programming language]] | license = Copyrighted but sharable | website = }} '''Small-C''' is both a subset of the [[C (programming language)|C programming language]], suitable for resource-limited [[microcomputer]]s and [[embedded system]]s, and an implementation of that subset. Originally valuable as an early [[compiler]] for microcomputer systems available during the late 1970s and early 1980s, the implementation has also been useful as an example simple enough for teaching purposes. The original compiler, written in Small-C for the [[Intel 8080]] by Ron Cain, appeared in the May 1980 issue of ''[[Dr. Dobb's Journal]]''. James E. Hendrix improved and extended the original compiler, and wrote ''The Small-C Handbook''. Ron [[Bootstrapping (compilers)|bootstrapped]] Small-C on the [[SRI International]] [[PDP 11]]/45 [[Unix]] system with an account provided by John Bass for Small C development. The provided [[source code]] was released with management permission into the [[public domain]].{{citation needed|date=September 2020}} Small-C was important for tiny computers in a manner somewhat analogous to the importance of [[GNU Compiler Collection|GCC]] for larger computers. Just like its [[Unix-like|Unix]] counterparts, the compiler generates [[assembly language|assembler code]], which then must be translated to [[machine code]] by an available [[assembly language#Assembler|assembler]]. Small-C is a [[retargetable compiler]]. Porting Small-C requires only that the back-end [[code generation (compiler)|code generator]] and the library to operating system interface calls be rewritten for the target processor. == Language subset == {{Over-quotation|section|date=June 2021}} "In May of 1980 Dr. 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 interesting feature of the compiler besides its small size was the language in which it was written—the one it compiled. It was a self-compiler! (Although this is commonplace today, it was a fairly novel idea at the time.) With a simple, one-pass algorithm, his compiler generated assembly language for the 8080 processor. Being small, however, it had its limitations. It recognized only characters, integers, and single dimension arrays of either type. The only loop controlling device was the while statement. There were no Boolean operators, so the bitwise logical operators & (AND) and | (OR) were used instead. But even with these limitations, it was a very capable language and a delight to use, especially compared to assembly language. "Recognizing the need for improvements, Ron encouraged me to produce a second version, and in December 1982 it also appeared in Dr. Dobb's Journal. The new compiler augmented Small C with (1) code optimizing, (2) data initializing, (3) conditional compiling, (4) the extern storage class, (5) the for, do/while, switch, and goto statements, (6) combination assignment operators, (7) Boolean operators, (8) the [[ones' complement]] operator, (9) block local variables, and (10) various other features. Then in 1984 Ernest Payne and I developed and published a CP/M compatible run-time library for the compiler. It consisted of over 80 functions and included most of those in the UNIX C Standard I/O Library—the ones that pertained to the CP/M environment. This became version 2.1 and the subject of The Small C Handbook."<ref>{{cite book |title= A Small-C Compiler: Language, Usage, Theory, and Design|url=https://www.drdobbs.com/developer-network-small-c-compiler-book/184415519?queryText=%2522small%2Bc%2522 |publisher= M & T Books 1988 / Dr. Dobb's Journal Developer Network 2005|chapter=Introduction|author=James E. Hendix}}</ref> Rick Grehan ported Small-C to MS-DOS and [[Macintosh]] in 1988 for a new version of the ''[[BYTE]]'' [[benchmark (computing)|benchmark]]s.<ref name="grehan198807">{{Cite magazine |last=Grehan |first=Rick |date=July 1988 |title=The Pitfalls of Porting |url=https://archive.org/details/byte-1988-07_202104/page/217/mode/1up?view=theater |access-date=2025-04-12 |magazine=[[Byte (magazine)|Byte]] |pages=217-222}}</ref> ==See also== * [[BDS C]] (1979) – C compiler for Z80 and 8080 systems * MISOSYS C (1985) - C compiler for TRS-80 (Z80 CPU) * [[Tiny C Compiler|Tiny C]] (2002) – C compiler for slow x86 and ARM computers having little disk space ===Small-C variants=== * [[Z88DK]] – Cross Small-C implementation for Z80 based microcomputers * [[cc65]] – Cross Small-C implementation for 6502 computers * [[Deep Blue C]] – Small-C for the [[Atari 8-bit computers]] * A.J.Travis – Native Small-C for the [[BBC Micro]]<ref>{{cite web |title=C compilers for the BBC Computer |url=http://mdfs.net/System/C/BBC/ |publisher=Mdfs.net}}</ref> ==References== {{Reflist}} ==Notes== * Ron Cain, "A Small C Compiler for the 8080's", ''[[Dr. Dobb's Journal]]'', April–May 1980, pp. 5–19 * James E. Hendrix, ''The Small-C Handbook'', Reston 1984, {{ISBN|0-8359-7012-4}} * James E. Hendrix, ''A Small C Compiler: Language, Usage, Theory, and Design'', M & T Books 1988, {{ISBN|0-934375-88-7}} * James E. Hendrix, ''Small C Compiler'', M & T Books 1990, {{ISBN|1-55851-124-5}} ==External links== *[http://www.svipx.com/pcc/PCCminipages/zc9b6ec9e.html Comments by Ron Cain on creation of Small-C] *[http://www.cpm.z80.de/small_c.html Several implementations of Small-C] *[http://mdfs.net/System/C/BBC/ Native compiler for the BBC Computer] *[http://twimgs.com/ddj/sdmediagroup/images/sdm1123195158574/ddj_devnetwork_small_c.zip Dr. Dobb's Small-C Resource CDROM iso-image download] {{Authority control}} [[Category:C programming language family]] [[Category:1980 software]] [[Category:C (programming language) compilers]] [[Category:CP/M software]]
Summary:
Please note that all contributions to Niidae Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Encyclopedia:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Authority control
(
edit
)
Template:Citation needed
(
edit
)
Template:Cite book
(
edit
)
Template:Cite magazine
(
edit
)
Template:Cite web
(
edit
)
Template:Distinguish
(
edit
)
Template:ISBN
(
edit
)
Template:Infobox software
(
edit
)
Template:Over-quotation
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Search
Search
Editing
Small-C
Add topic