Source-to-source compiler: Difference between revisions

Content deleted Content added
m clean up
Altered template type. Add: chapter-url, chapter, title. Removed or converted URL. | Use this tool. Report bugs. | #UCB_Gadget
 
(48 intermediate revisions by 31 users not shown)
Line 1:
{{Short description|Translator that takes source code of a program and produces an equivalentcomputer source code in the same or a different programming language}}
{{Distinguish|Cross compiler|Compiler-compiler|Transcoder|Transputer}}
{{Use dmy dates|date=January 2020|cs1-dates=y}}
Line 5:
{{Program execution}}
{{Data transformation}}
A '''source-to-source translator''', '''source-to-source compiler''' ('''S2S compiler'''), '''transcompiler''', or '''transpiler'''<ref name="ARC_1988_Transpiler"/><ref name="Pountain_1989"/><ref name="Sector7_1993_Transpiler"/> is a type of [[translatorTranslator (computing)|translator]] that takes the [[source code]] of a program written in a [[programming language]] as its input and produces an equivalent source code in the same or a different programming language, usually as an [[intermediate representation]]. A source-to-source translator converts between programming languages that operate at approximately the same level of [[abstractionAbstraction (computer science)|abstraction]], while a traditional [[compiler]] translates from a [[highHigh-level programming language|higher level programming language]] to a [[lowLow-level programming language|lower level programming language]]. For example, a source-to-source translator may perform a translation of a program from [[Python (programming language)|Python]] to [[JavaScript (programming language)|JavaScript]], while a traditional compiler translates from a language like [[C (programming language)|C]] to [[Assembly language|assemblerassembly]] or [[Java (programming language)|Java]] to [[Java bytecode|bytecode]].<ref name="Devopedia_Transpiler"/> An [[automatic parallelizing]] compiler will frequently take in a high level language program as an input and then transform the code and annotate it with parallel code annotations (e.g., [[OpenMP]]) or language constructs (e.g. [[Fortran]]'s <code>forall</code> statements).<ref name="Pountain_1989"/><ref name="Compiler_Types"/>
 
Another purpose of source-to-source-compiling is translating legacy code to use the next version of the underlying programming language or an application programming interface ([[API]]) that breaks backward compatibility. It will perform automatic [[code refactoring]] which is useful when the programs to refactor are outside the control of the original implementer (for example, converting programs from Python 2 to Python 3, or converting programs from an old API to the new API) or when the size of the program makes it impractical or time-consuming to refactor it by hand.
 
Transcompilers may either keep translated code structure as close to the source code as possible to ease development and [[debugging]] of the original source code or may change the structure of the original code so much that the translated code does not look like the source code.<ref name="Fowler_2013"/> There are also debugging utilities that map the transcompiled source code back to the original code; for example, the [[JavaScript]] Source Map standard{{Citation needed|reason=Not a standard|date=September 2020}} allows mapping of the JavaScript code executed by a [[web browser]] back to the original source when the JavaScript code was, for example, minified or produced by a transcompiled-to-JavaScript language.{{Citation needed|date=September 2020}}
 
Examples include [[Google Closure Tools|Closure Compiler]], [[CoffeeScript]], [[Dart (programming language)|Dart]], [[Haxe]], [[RubyOpal (programming languageRuby)|Opal]], [[TypeScript]] and [[Emscripten]].<ref name="Epic_Games"/>
 
== {{Anchor|Translator}}Assembly language translators ==
Line 18:
=== Intel CONV86 ===
{{anchor|CONV86}}
[[Intel]] marketed their 16-bit processor [[Intel 8086|8086]] to be [[source-code compatibility|source compatible]] to the [[Intel 8080|8080]], an 8-bit processor.<ref name="Scanlon_1988"/> To support this, Intel had an [[Intel ISIS-II|ISIS-II]]-based translator from 8080 to 8086 source code named CONV86<ref name="Intel_1978_CONV86"/><ref name="Intel_1979_CONV86"/><ref name="Intel_1983_ASM86"/><ref name="Nelson_1988"/> (also referred to as CONV-86<ref name="Intel_1979_Family"/> and CONVERT&nbsp;86<ref name="Freiberger_1981_Translators"/><ref name="Taylor_1982_Translators"/>) available to [[OEM]] customers since 1978, possibly the earliest program of this kind.<ref group="nb" name="NB1_WordStar"/> It supported multiple levels of translation and ran at 2&nbsp;MHz on an Intel Microprocessor Development System [[Intel MDS-800|MDS-800]] with 8-inch [[floppy drive]]s. According to user reports, it did not work very reliably.<ref name="Guzis_2013_ISIS"/><ref name="Guzis_2016_Translators"/>
 
=== SCP TRANS86 ===
{{anchor|TRANS86|TRANS|SCP}}[[Seattle Computer Products]]' (SCP) offered TRANS86.COM,<ref name="Taylor_1982_Translators"/><ref name="BYTE_2018_MASM"/><ref name="Paterson_1983"/> written by [[Tim Paterson]] in <!-- at least August per ref, possibly earlier in late 1979? -->1980 while developing [[86-DOS]].<ref name="BYTE_1980_86-DOS"/><ref name="Paterson_1994_Origins_DOS"/><ref name="Paterson_2007_Design-DOS"/> The utility could translate Intel 8080 and [[Zilog]] [[Z80]] assembly source code (with Zilog/[[Mostek]] [[mnemonic]]s) into {{Not a typo|.ASM}} source code for the Intel 8086 (in a format only compatible with SCP's [[cross-assembler]] ASM86 for [[CP/M-80]]), but supported only a subset of [[opcode]]s, registers and modes, and often still required significant manual correction and rework afterwards.<ref name="SCP_Cross"/><ref name="BYTE_1980_86-DOS"/> Also, performing only a mere [[transliteration]],<ref name="Freiberger_1981_Translators"/><ref name="BYTE_2018_MASM"/><ref name="Intel_1978_CONV86"/><ref name="Intel_1979_CONV86"/> the brute-force [[single-pass compiler|single-passtranslator]] translator did not carry out any register and jump optimizations.<ref name="SCP_1980_86-DOS"/><ref name="Paterson_2014_MSDOS125"/> It took about 24&nbsp;KB of RAM.<ref name="Taylor_1982_Translators"/> The SCP version 1 of TRANS86.COM ran on Z80-based systems.<ref name="Taylor_1982_Translators"/><ref name="BYTE_2018_MASM"/> Once 86-DOS was running, Paterson, in a [[self-hosting (compilers)|self-hosting]]-inspired approach, utilized TRANS86 to convert itself into a program running under 86-DOS.<ref name="Paterson_2007_Design-DOS"/><ref name="BYTE_2018_MASM"/> Numbered version 2<!-- f.e. TRANS 2.21 -->, this was named TRANS.COM instead.<ref name="BYTE_2018_MASM"/><ref name="Paterson_2014_MSDOS125"/><ref name="SCP_1980_86-DOS"/><ref name="SCP_86-DOS"/><ref name="SCP_TRANS"/> Later in 1982, the translator was apparently also available from [[Microsoft]].<ref name="Taylor_1982_Translators"/><ref name="Hughes_1982_MS-DOS"/>
 
=== Sorcim TRANS86 ===
Line 27:
 
=== Digital Research XLT86 ===
{{anchor|XLT86}}Much more sophisticated and the first to introduce [[optimizing compiler]] technologies into the source translation process was [[Digital Research]]'s XLT86&nbsp;1.0 in September 1981. XLT86&nbsp;1.1 was available by April 1982<!-- possibly earlier -->.<ref name="Barry_1982_XLT86"/> The program was written by [[Gary Kildall]]<ref name="Freiberger_1981_Translators"/><ref name="Swaine_1982_CPM"/><ref name="Bunnell_1982_CPM"/><ref name="Laws_2014_IEEE"/> and translated {{Not a typo|.ASM}} source code for the Intel 8080 processor (in a format compatible with ASM, MAC or RMAC assemblers) into {{Not a typo|[[A86 (software)|.A86]]}} source code for the 8086 (compatible with ASM86). Using [[global data flow analysis]] on 8080 register usage,<ref name="Digital_Research_1981_News"/><ref name="Freiberger_1981_Translators"/><ref name="Kildall_1973_Optimization"/><ref name="Kildall_1972_Optimization"/> the five-phase [[multi-pass compiler|multi-pass]] translator would also optimize the output for code size and take care of calling conventions (CP/M-80 [[BDOS]] calls were mapped into BDOS calls for [[CP/M-86]]), so that CP/M-80 and MP/M-80 programs could be ported to the CP/M-86 and [[MP/M-86]] platforms automatically. XLT86.COM itself was written in [[PL/I-80]] for CP/M-80 platforms.<ref name="XLT86_1981"/><ref name="Taylor_1982_Translators"/><ref name="Barry_1982_XLT86"/><ref name="Digital_Research_XLT86"/> The program occupied 30&nbsp;KB of RAM for itself plus additional memory for the [[control-flow graph|program graph]]. On a 64&nbsp;KB memory system, the maximum source file size supported was about 6&nbsp;KB,<ref name="XLT86_1981"/><ref name="Taylor_1982_Translators"/><ref name="Goldfarb_1982"/><ref name="Barry_1982_XLT86"/> so that larger files had to be broken down accordingly before translation.<ref name="Taylor_1982_Translators"/><ref name="Barry_1982_XLT86"/> Alternatively, XLT86 was also available for [[Digital Equipment Corporation|DEC]] [[VAX/VMS]].<ref name="Taylor_1982_Translators"/><ref name="Barry_1982_XLT86"/> Although XLT86's input and output worked on source-code level, the translator's in-memory representation of the program and the applied code optimizing technologies set the foundation to [[binary recompilation]].<ref name="Wharton_1994"/><ref name="SPA_1995"/><ref name="Swaine_1997"/>
 
=== Others ===
Line 39:
 
== Programming language implementations ==
{{ExpandIncomplete list|date=August 2020}}
The first implementations of some programming languages started as transcompilers, and the default implementation for some of those languages are still transcompilers. In addition to the table below, a [[CoffeeScript]] maintainer provides a list of languages that compile to JavaScript.<ref name="Coffeescript"/>
{| class="wikitable"
Line 46:
!Source language
!Target language
!Comments
|-
|[[Babel (transpiler)|Babel]]
|[[ECMAScript]] 6+ ([[JavaScript]])
|ES5
|
|-
|[https://www.cerberus-x.com/community/portal/ Cerberus X]
|Cerberus
|[[JavaScript]], [[Java (programming language)|Java]], [[C++]], [[C Sharp (programming language)|C#]]
|
|-
|[[Cfront]]
|[[C++]]
|[[C (programming language)|C]]
|-
|[[HipHop for PHP|HipHop]] for PHP (HPHPc)
|[[PHP]]
|[[C++]]
|-
|[[Babel (transpiler)|Babel]]
|[[ECMAScript|ES6+]] ([[JavaScript|JS]])
|ES5
|-
|[[ClojureScript]]
|[[Clojure]]
|[[JavaScript]]
|
|-
|[[CoffeeScript]]
|JSweet<ref name="JSweet"/>
|[[CoffeeScript]]
|[[Java (programming language)|Java]]
|JavaScript
|[[TypeScript]]
|
|-
|[https://dafny.org Dafny]
|Swiftify<ref name="Swiftify"/>
|[[Dafny (programming language)|Dafny]]
|[[Objective-C]]
|C#, [[JavaScript]], [[Java (programming language)|Java]], C++, [[Go (programming language)|Go]], [[SwiftPython (programming language)|SwiftPython]]
|
|-
|[https://dart.dev/tools/dart2js Dart]
|J2ObjC<ref name="J2ObjC"/>
|[[JavaDart (programming language)|JavaDart]]
|JavaScript
|[[Objective-C]]
|
|-
|h5<ref name="Olivenbaum"/>
|[[C Sharp (programming language)|C#]]
|JavaScript
|
|-
|[[Eiffel (programming language)|Eiffel]], via [[EiffelStudio]]
|Eiffel
|C, [[Common Intermediate Language]]
|
|-
|[[Elm_(programming_language)|Elm]]
|[[Elm]]
|JavaScript
|
|-
|[[Haxe]]
|[[Haxe]]
|[[ActionScript#ActionScript 3.0|ActionScript 3]], [[JavaScript]], [[Java (programming language)|Java]], [[C++]], [[C Sharp (programming language)|C#]], [[PHP]], [[Python (programming language)|Python]], [[Lua (programming language)|Lua]]
|
|-
|[[HipHop for PHP]] (HPHPc)
|[[PHP]]
|C++
|
|-
|J2ObjC<ref name="J2ObjC"/>
|Java
|[[Objective-C]]
|
|-
|JSweet<ref name="JSweet"/>
|Java
|[[TypeScript]]
|
|-
|Maia<ref name="Maia_2020"/>
|Maia
|[[Verilog]]
|
|-
|[https://wwwcode.cerberus-xgoogle.com/communityarchive/portalp/naca/ Cerberus XNACA]
|[[COBOL]], Java
|Cerberus
|COBOL, Java
|[[JavaScript]], [[Java (programming language)|Java]], [[C++]], [[C Sharp (programming language)|C#]]
|
|-
|[https://github.com/thepowersgang/mrustc mrustc]
|h5<ref name="Olivenbaum"/>
|[[C SharpRust (programming language)|C#Rust]]
|C
|[[JavaScript]]
|Experimental compiler able to bootstrap official Rust compiler (rustc)
|-
|[https://nim-lang.org/ Nim]
|[[Nim (programming language)|Nim]]
|Nim
|C, C++, [[Objective-C]], JavaScript
|
|-
|[[PureScript]]
|[https://dart.dev/tools/dart2js Dart]
|[[PureScript]]
|Dart
|JavaScript
|
|-
|[[Reason_(programming_language)|ReasonML]]
|[[Reason]]
|JavaScript
|
|-
|[https://rescript-lang.org/ ReScript]
|[[OCaml]]
|JavaScript
|
|-
|[[Sather]]
|Sather
|C
|
|-
|-
|[[Scala (programming language)#Other_compilers_and_targets|Scala.js]]
|[[Scala (programming language)|Scala]]
|JavaScript
|
|-
|Swiftify<ref name="Swiftify"/>
|[[Objective-C]]
|[[Swift (programming language)|Swift]]
|
|-
|[[V (programming language)|V]]
|V
|C
|
|-
|[[Vala (programming language)|Vala]]
|Vala
|C
|
|-
|[[Visual Eiffel]]
|[[Eiffel (programming language)|Eiffel]]
|C
|
|-
|[https://fable.io/ Fable]
|[[F Sharp (programming language)|F#]]
|JavaScript
|
|-
|[https://fable.io/Fable.Python/ Fable Python]
|F#
|Python
|
|}
 
== Porting a codebase ==
When developers want to switch to a different language while retaining most of an existing codebase, it might be better to use a transcompiler compared to rewriting the whole software by hand. Depending on the quality of the transcompiler, the code may or may not need manual intervention in order to work properly. This is different from "transcompiled languages" where the specifications demand that the output source code always works without modification. All transcompilers used to [[software port|port]] a codebase will expect manual adjustment of the output source code if there is a need to achieve maximum code quality in terms of readability and platform convention.
 
{| class="wikitable collapsible"
Line 121 ⟶ 212:
| [[Google Web Toolkit]] || [[Java (programming language)|Java]] program that uses a specific [[Application programming interface|API]] || [[JavaScript]] || The Java code is a little bit constrained compared to normal Java code.
|-
| Js_of_ocaml<ref name="Ocam1"/> of [[Ocsigen]] || [[OCaml]] || [[JavaScript]] ||
|-
| J2Eif<ref name="J2EIF"/> || [[Java (programming language)|Java]] || [[Eiffel (programming language)|Eiffel]] || The resulting Eiffel code has classes and structures similar to the Java program but following Eiffel syntax and conventions.
|-
| C2Eif<ref name="C2EIF"/> || [[C (programming language)|C]] || [[Eiffel (programming language)|Eiffel]] || The resulting Eiffel code has classes and structures that try to be as clean as possible. The tool is complete and relies on embedding the C and assembly code if it cannot translate it properly.
|-
|Skip<ref name="Skip"/>
|[[Swift (programming language)|Swift]]
|[[Kotlin (programming language)|Kotlin]]
| Skip is an Xcode plug-in that transpiles a Swift iOS app or library using SwiftUI into equivalent native Kotlin code for Android using Jetpack Compose.
|-
| Swiftify<ref name="Swiftify_Objective-C"/> || [[Objective-C]] || [[Swift (programming language)|Swift]] || Swiftify is an online source to source conversion tool from Objective-C into Swift. It assists developers who are migrating all or part of their iOS codebase into Swift. The conversion is aimed primarily at converting the syntax between Objective-C and Swift, and is helped because Apple took efforts to ensure compatibility between Swift and Objective-C runtimes.
Line 136 ⟶ 232:
A transcompiler pipeline is what results from ''recursive transcompiling''. By stringing together multiple layers of tech, with a transcompile step between each layer, technology can be repeatedly transformed, effectively creating a distributed [[Language-independent specification|language independent specification]].
 
[[XSLT]] is a general-purpose transform tool that can be used between many different technologies, to create such a [[derivative code]] pipeline.<ref name="W3C_XSLT2">World Wide Web Consortium (W3C). "XSL Transformations (XSLT) Version 2.0". https://www.w3.org/TR/xslt-20/</ref>
 
=== Recursive transcompiling ===
Line 178 ⟶ 274:
== References ==
{{Reflist|refs=
<ref name="Devopedia_Transpiler">{{cite web |title=Transpiler |website=devopedia.org |date=2017-03-17 |url=https://devopedia.org/transpiler |access-date=2019-06-22 |url-status=live |archive-url=https://web.archive.org/web/20191105090612/https://devopedia.org/transpiler |archive-date=2019-11-05}}</ref>
<ref name="Compiler_Types">{{cite web |title=Types of compilers |date=1997–2005 |publisher=compilers.net |url=http://www.compilers.net/paedia/compiler/index.htm |access-date=2010-10-28 |url-status=live |archive-url=https://web.archive.org/web/20190719090932/http://www.compilers.net/paedia/compiler/index.htm |archive-date=2019-07-19}}</ref>
<ref name="Fowler_2013">{{cite web |title=Transparent Compilation |date=2013-02-12 |author-last=Fowler |author-first=Martin |author-link=Martin Fowler (software engineer) |url=http://martinfowler.com/bliki/TransparentCompilation.html |access-date=2013-02-13 |url-status=live |archive-url=https://web.archive.org/web/20200101165423/https://martinfowler.com/bliki/TransparentCompilation.html |archive-date=2020-01-01}}</ref>
Line 184 ⟶ 280:
<ref name="C2GO">{{cite web |title=C->Go translator |website=[[GitHub]] |url=https://github.com/rsc/c2go |access-date=2018-01-11 |url-status=live |archive-url=https://web.archive.org/web/20181207133222/https://github.com/rsc/c2go |archive-date=2018-12-07}}</ref>
<ref name="Go_ReleaseNotes">{{cite web |title=Go 1.5 Release Notes |url=https://golang.org/doc/go1.5 |access-date=2018-01-11 |url-status=live |archive-url=https://web.archive.org/web/20200201131555/https://golang.org/doc/go1.5 |archive-date=2020-02-01}}</ref>
<ref name="Cox_Go">{{cite web |title=Go 1.3+ Compiler Overhaul |author-first=Russ |author-last=Cox |author-link=:wikidata:Q22338784 |url=https://golang.org/s/go13compiler<!-- https://docs.google.com/document/d/1P3BLR31VA8cvLJLfMibSuTdwTuF7WWLux71CYD0eeD8/edit --> |access-date=2018-01-11 |url-status=live |archive-url=https://web.archive.org/web/20200109183016/https://support.google.com/accounts/answer/32050 |archive-date=2020-01-09}}</ref>
<ref name="Scanlon_1988">{{cite book |title=8086/8088/80286 assembly language |author-last=Scanlon |author-first=Leo J. |date=1988 |publisher=Brady Books |isbn=978-0-13-246919-7 |page=[https://archive.org/details/8086808880286ass0000scan/page/12 12] |url=https://archive.org/details/8086808880286ass0000scan/page/12 |quote=[…] The [[8086]] is software-compatible with the [[8080]] at the assembly-language level. […]}}</ref>
<ref name="Kildall_1972_Optimization">{{Cite book |title=Global expression optimization during compilation |author-first=Gary Arlen |author-last=Kildall |author-link=Gary Arlen Kildall |type=Ph.D. dissertation |publisher=[[University of Washington]], Computer Science Group |___location=Seattle, Washington, USA |date=May 1972 |id=Thesis No. 20506, Technical Report No. 72-06-02}}</ref>
<ref name="Kildall_1973_Optimization">{{Cite journalbook |author-first=Gary Arlen |author-last=Kildall |author-link=Gary Kildall |date=1973-10-01 |title=A Unified Approach to Global Program Optimization |journal=Proceedings of the 1st Annualannual ACM SIGACT-SIGPLAN Symposiumsymposium on Principles of Programmingprogramming Languageslanguages (POPL)- |series=POPL '73 |chapter=A unified approach to global program optimization |author-link=Gary Kildall |date=1973-10-01 |___location=Boston, Massachusetts, USA |pages=194–206 |doi=10.1145/512927.512945 |hdl=10945/42162 |s2cid=10219496 |chapter-url=http://static.aminer.org/pdf/PDF/000/546/451/a_unified_approach_to_global_program_optimization.pdf |access-date=2006-11-20 |url-status=live |archive-url=https://web.archive.org/web/20170629213307/http://static.aminer.org/pdf/PDF/000/546/451/a_unified_approach_to_global_program_optimization.pdf |archive-date=2017-06-29}}</ref>
<ref name="XLT86_1981">{{cite book |date=September 1981 |title=XLT86 – 8080 to 8086 Assembly Language Translator – User's Guide |edition=First printing |publisher=[[Digital Research, Inc.]] |___location=Pacific Grove, California, USA |url=http://www.s100computers.com/Software%20Folder/Assembler%20Collection/Digital%20Research%20XLT86%20Manual.pdf |access-date=2016-11-18 |url-status=live |archive-url=https://web.archive.org/web/20161118230700/http://www.s100computers.com/Software%20Folder/Assembler%20Collection/Digital%20Research%20XLT86%20Manual.pdf |archive-date=2016-11-18|id=[https://archive.org/stream/bitsavers_digitalResuideSep81_2620625/XLT86_Users_Guide_Sep81_djvu.txt archive.org copy]}}</ref>
<ref name="Digital_Research_1981_News">{{cite journalmagazine |title=XLT86 Reduces Conversion Effort in Assembly Language Program Translation |series=Product Update |journalmagazine=Digital Research News – for Digital Research Users Everywhere |publisher=[[Digital Research, Inc.]] |___location=Pacific Grove, California, USA |date=November 1981 |volume=1 |number=1 |id=Fourth Quarter |pages=2, 7 |url=https://amaus.net/static/S100/software/DRI/Digital%20Research%20News/01x01%201981%20Digital%20Research%20News.pdf |archive-url=https://web.archive.org/web/20211110124333/https://amaus.net/static/S100/software/DRI/Digital%20Research%20News/01x01%201981%20Digital%20Research%20News.pdf |url-status=usurped |archive-date=10 November 2021 |access-date=2020-01-18 |quote=[…] An 8- to 16-bit assembly code translator is now available from [[Digital Research]]. Called XLT86, it is designed to help ease the time-consuming process of converting [[CP/M]] software products from [[8080]]- to [[8086]]-based microcomputers. XLT86 can be used to translate any assembly language programs that are compatible with Digital Research's ASM, MAC or RMAC assembler format. The XLT86 program translator first reads an 8080 assembly language program and then produces an output file containing 8086 assembly language statements acceptable to the Digital Research ASM-86 assembler. Unlike other 8086 code converters that translate a single 8080 instruction into as many as ten 8086 instructions, XLT86 performs extensive [[data flow analysis]] to determine register usage throughout the original program. The information collected through this analysis is used during program translation to eliminate unnecessary flag save and restore operations. "The resulting 8086 program is both simpler and more compact than equivalent programs produced by other translators," according to Curt Geske, of the Digital Research marketing group. "Furthermore, XLT86 allows OEMs, end users and software vendors to preserve their investment in 8080-based assembly language programs when changing to 16-bit 8086-based computers by reducing the conversion effort." Programs translated by XLT86 run on both [[CP/M-86]] and [[MP/M-86]] […] XLT86 is available immediately. It operates on any 8-bit CP/M or [[MP/M]] system, or under the [[OpenVMS|VMS]] operating-system for use on [[Digital Equipment Corporation]] [[DEC VAX|VAX]] series [[mini-computerminicomputer]]s. The CP/M version is priced at [[United States dollar|$]]150. The VAX version sells for $8,000. […]}}</ref>
<ref name="Digital_Research_XLT86">{{cite web |title=XLT86 for CP/M-80 |publisher=[[Digital Research]] |url=http://www.cpm.z80.de/download/xlt86.zip |access-date=2020-01-18 |url-status=live |archive-url=https://web.archive.org/web/20200116055650/http://www.cpm.z80.de/download/xlt86.zip |archive-date=2020-01-16}} (NB. This ZIP archive contains the [[CP/M-80]] executable XLT86.COM [22&nbsp;KB] as well as two overlay files XLT00.OVL [8&nbsp;KB] and XLT01.OVL [9&nbsp;KB].)<!-- This has officially been released as free software by Caldera/Lineo. --></ref>
<ref name="SCP_1980_86-DOS">{{cite book |date=1980 |title=86-DOS – Disk Operating System for the 8086. User's manual |version=Version 0.3 |edition=Preliminary |publisher=[[Seattle Computer Products]] |___location=Seattle, Washington, USA |url=http://www.patersontech.com/dos/Docs/86_Dos_usr_03.pdf |access-date=2020-02-01 |url-status=live |archive-url=https://web.archive.org/web/20190714004434/http://www.patersontech.com/dos/docs/86_Dos_usr_03.pdf |archive-date=2019-07-14}}</ref>
<ref name="SCP_86-DOS">{{cite book |date=1980 |title=SCP 86-DOS – Single-User Disk Operating System for the 8086 |edition=Preliminary |publisher=[[Seattle Computer Products]] |___location=Seattle, Washington, USA |url=https://archive.org/stream/bitsavers_seattleCominary_1042322/SCP_86-DOS_Preliminary_djvu.txt |access-date=2020-01-18 |quote=[…] The source code translator can translate most [[Z80]] source code into [[8086]] source code acceptable to the assembler after minor manual correction. This provides a relatively quick and easy way to transport programs between the processors. […] TRANS file […] The Z80-to-8086 Source Code Translator, called by this command, is essentially identical to our version that runs on the Z80, which is described in the back of the Assembler manual. The only differences: 1. The Translator is called TRANS, not TRANS86, and it runs on the 8086 under [[86-DOS]], not on the Z80 under [[CP/M]]. 2. The extension of the output file is "ASM", not "A86". […]}} [https://archive.org/details/bitsavers_seattleCominary_1042322]</ref>
<ref name="SCP_Cross">{{cite book |title=Z80/8086 Cross Assembler Release 1 |chapter=Z80 To 8086 Translator |date=<!-- possibly 1980, but needs verification --> |version=Revision A |edition=Preliminary |publisher=[[Seattle Computer Products]] |___location=Seattle, Washington, USA |pages=20–21<!-- actually an unnumbered addendum page following page 19 --> |url=https://amaus.net/static/S100/seattle%20computer%20products/software/SCP%20Z80%208086%20cross%20assembler.pdf |archive-url=https://web.archive.org/web/20211130181326/https://amaus.net/static/S100/seattle%20computer%20products/software/SCP%20Z80%208086%20cross%20assembler.pdf |url-status=usurped |archive-date=30 November 2021 |access-date=2020-01-18 |quote=[…] The [[Seattle Computer Products]] [[Z80]] to [[8086]] Translator runs on the Z80 under [[CP/M]]. It accepts as input a Z80 source file written using [[Zilog]]/[[Mostek]] mnemonics and converts it to an 8086 source file in a format acceptable to our 8086 Cross Assembler. To translate a file, simply type TRANS86 <filename>.<ext>. Regardless of the original extension, the output file will be named <filename>.A86 and will appear on the same drive as the input file. A file named TRNTEST.Z80 is included to demonstrate the translator. The entire Z80 assembly language is not translated. […]}} [https://archive.org/details/bitsavers_seattleComsemblerPreliminary_611077]</ref>
<ref name="SCP_TRANS">{{cite book |title=Z80 To 8086 Translator |publisher=[[Seattle Computer Products]] |date=<!-- probably 1980 --> |pages=((TRANS{{hyphen}}1{{ndash}}TRANS{{hyphen}}2)) |url=https://amaus.net/static/S100/seattle%20computer%20products/software/SCP%20Z80%20to%208086%20translator.pdf |archive-url=https://web.archive.org/web/20211130171816/https://amaus.net/static/S100/seattle%20computer%20products/software/SCP%20Z80%20to%208086%20translator.pdf |url-status=usurped |archive-date=30 November 2021 |access-date=2020-01-19 }} (23 pages)</ref>
<ref name="Paterson_2014_MSDOS125">{{cite web |author-first1=Tim
|author-last1=Paterson |author-link1=Tim Paterson |title=Microsoft DOS V1.1 and V2.0: Z80 to 8086 Translator version 2.21 /msdos/v11source/TRANS.ASM |publisher=[[Computer History Museum]], [[Microsoft]] |date=2013-12-19<!-- 2014-03-25 --> |orig-yeardate=1982-07-01 |url=http://www.computerhistory.org/atchm/microsoft-research-license-agreement-msdos-v1-1-v2-0/ |access-date=2014-03-25 |url-status=live |archive-url=https://web.archive.org/web/20191112060745/https://computerhistory.org/blogs/microsoft-research-license-agreement-msdos-v1-1-v2-0/?key=microsoft-research-license-agreement-msdos-v1-1-v2-0 |archive-date=2019-11-12}} [https://web.archive.org/web/20210723171917/https://github.com/Microsoft/MS-DOS/blob/master/v1.25/source/TRANS.ASM] (NB. While the publishers claim this would be MS-DOS 1.1 and 2.0, it actually is [[SCP MS-DOS 1.25]] and [[TeleVideo PC DOS 2.11]].)</ref>
<ref name="Paterson_1983">{{cite magazine |title=An Inside Look at MS-DOS – The design decisions behind the popular operating system – The history of and design decisions behind MS-DOS. how it works, and where it's going. |author-first=Tim |author-last=Paterson |author-link=Tim Paterson |series=16-bit Designs |magazine=[[BYTE]] |publisher=[[McGraw-Hill, Inc.]] |issn=0360-5280 |id={{CODEN|BYTEDJ}} |volume=8 |number=6 |date=June 1983 |pages=230–252 |url=https://archive.org/details/byte-magazine-1983-06-rescan |access-date=2020-01-23 |url-status=live |archive-url=https://web.archive.org/web/20170317042144/https://archive.org/details/byte-magazine-1983-06-rescan |archive-date=2017-03-17 |quote=[…] [[MS-DOS]] Design Criteria […] The primary design requirement of MS-DOS was [[CP/M-80]] [[translation compatibility]], meaning that, if an [[8080]] or [[Z80]] program for CP/M were translated for the [[8086]] according to [[Intel]]'s [[#Intel-1979-CONV86|published rules]], that program would execute properly under MS-DOS. Making CP/M-80 translation compatibility a requirement served to promote rapid development of 8086 software, which, naturally, [[Seattle Computer Products|Seattle Computer]] was interested in. There was partial success: those software developers who chose to translate their CP/M-80 programs found that they did indeed run under MS-DOS, often on the first try. Unfortunately, many of the software developers Seattle Computer talked to in the earlier days preferred to simply ignore MS-DOS. Until the [[IBM Personal Computer]] was announced, these developers felt that [[CP/M-86]] would be the operating system of 8086/8088 computers. […]}} [https://archive.org/stream/byte-magazine-1983-06-rescan/1983_06_BYTE_08-06_16-Bit_Designs_djvu.txt] [https://archive.org/details/byte-magazine-1983-06-rescan]</ref>
<ref name="Freiberger_1981_Translators">{{cite news |title=Program translators do it literally – and sometimes in context |author-first=Paul |author-last=Freiberger |author-link=Paul Freiberger |series=Special section: Computer compatibility |newspaper=[[InfoWorld]] – News For Microcomputer Users |issn=0199-6649 |publisher=[[Popular Computing, Inc.]] |date=1981-10-19 |volume=3 |issue=22 |page=19 |url=https://books.google.com/books?id=Gj0EAAAAMBAJ&pg=PA19 |access-date=2020-01-15 |url-status=live |archive-url=https://web.archive.org/web/20200201160014/https://books.google.com/books?id=Gj0EAAAAMBAJ&pg=PA19&lpg=PA19 |archive-date=2020-02-01 |quote=[…] "Unless you have a translating scheme that takes account of the peculiar idiosyncrasies of the target microprocessor, there is no way that an automatic translator can work," explains Daniel Davis, a programmer with [[Digital Research]]. "You'll end up with direct [[transliteration]]s." […] In spite of all these limitations, progress has been made recently in the development of translators. Most notably, Digital Research has introduced its eight- to 16-bit assembly code translator. Based on research performed by Digital Research president [[Gary Arlen Kildall|Gary Kildall]], the XLT86 appears to offer advances over previously available software translator technology. Like [[Sorcim]]'s Trans and [[Intel]]'s Convert&nbsp;86, Kildall's package translates assembly-language code from an [[8080]] microprocessor to an [[8086]]. However, Kildall has applied a [[global data flow analysis|global flow analysis]] technique that takes into account some of the major drawbacks of other translators. The procedure analyzes the register and flag usage in sections of 8080 code in order to eliminate nonessential code. According to Digital Research programmer Davis, the algorithm Kildall uses allows the translator to consider the context as it translates the program. Until now, one of the major problems with any translator program has been the inability of the software to do much more than transliteration. If Digital Research's new translator actually advances the technology to the point where context can be considered, then more software translators may proliferate in the microcomputer marketplace.}}</ref>
<ref name="Barry_1982_XLT86">{{cite news |title=XLT-86, a CP/M utility program by Digital Research |author-first=Tim |author-last=Barry |series=Software Review |newspaper=[[InfoWorld]] – The Newsweekly for Microcomputer Users |issn=0199-6649 |publisher=[[Popular Computing, Inc.]] |date=1982-04-05 |volume=4 |issue=13 |pages=40–41, 53 |url=https://books.google.com/books?id=ZjAEAAAAMBAJ&pg=PA40 |access-date=2020-01-25 |url-status=live |archive-url=https://web.archive.org/web/20200201160327/https://books.google.com/books?id=ZjAEAAAAMBAJ&pg=PA40&lpg=PA41 |archive-date=2020-02-01 |quote=[…] XLT-86 1.1 […] XLT-86 is an analytical translator program written in [[PL/I-80]]. It reads the entire 8080 source program, assembles it to machine code, analyzes the register, memory and flag utilization, and emits an optimized [[8086]] assembly-language program. […] There is also a version of XLT-86 for those of you who have access to a [[VAX 11/750]] or [[VAX 11/780|11/780]]. This version can translate much larger programs. It also costs $8000. […] While the translator adds some labels and equates to the source program as part of the translation, all original comments and program labels are passed through intact to the translated program. […] The program translation proceeds in a five-step process. First, the program is scanned and assembled to produce symbol values and locations. Second, the program structure is analyzed and decomposed into [[basic block]]s. Third, the basic blocks are analyzed to determine [[program flow]] and resource usage. Forth, the [[block (programming)|block structure]] and [[register allocation]] data is gathered into a listing for the user. Fifth, the flow information and source program are used to produce the [[8086]] source program. […]}}</ref>
<ref name="Taylor_1982_Translators">{{cite magazine |title=Upward migration – Part 1: Translators – Using translation programs to move CP/M-86 programs to CP/M and MS-DOS<!-- this is the actual title, however it is faulty--> |trans-title=<!-- this is the title as it should have been -->Using translation programs to move CP/M programs to CP/M-86 and MS-DOS |author-first1=Roger |author-last1=Taylor |author-first2=Phil |author-last2=Lemmons |date=June 1982 |magazine=[[BYTE]] |issn=0360-5280 |id={{CODEN|BYTEDJ}} |volume=7 |number=6 |publisher=[[BYTE Publications Inc.]] |pages=321–322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344 |url=https://tech-insider.org/personal-computers/research/acrobat/8206-b.pdf |access-date=2020-01-15 |url-status=live |archive-url=https://web.archive.org/web/20200116024623/https://tech-insider.org/personal-computers/research/acrobat/8206-b.pdf |archive-date=2020-01-16 |quote=[…] [[Digital Research]]'s XLT86 takes standard [[8080]] source code in a format compatible with ASM, MAC, or RMAC assemblers and converts the 8080 source code to [[8086]] source code in a format compatible with ASM86 operating under either [[CP/M-80]] or [[CP/M-86]]. Since XLT86 is written in [[PL/I-80]], the translator can run either stand-alone under CP/M-80 or for [[cross development]] under VAX/VMS. It produces optimized 8086 code in a five-phase, [[multipass compiler|multipass]] process, doing [[global data-flow analysis]] to determine optimal register usage. Although macro definitions are not supported, conditional-assembly directives are […] if you want macro expansion, you can use a pass through MAC or RMAC to produce a PRN file that can be edited […] to produce an expanded source file for input acceptable to XLT86. XLT86 does not recognize [[Z80]] instructions. XLT86 passes repeat loops through to the 8086 source code. XLT86 analyzes the source program in its entirety, determining the [[block (programming)|block structure]] and the register/flag usage. Working from this information, it translates the code to 8086 assembler code in an optimized way. The decision algorithm for each instruction type is given in […] the manual […] Register mapping generally follows […] with a loose relationship between the 8086 [[AX register|AX]] and the 8080 [[Program status word|PSW]]; the exact relationship is determined from register usage at [[translate time]]. Many [[Runtime (program lifecycle phase)|runtime]] options are available to control the translation process, both on the command line and embedded in the 8080 source text. […] XLT86 is a sophisticated program that does a reasonable job of optimizing the translation of 8080 source code to 8086 source code. [[BDOS]] calls from CP/M-80 are mapped into BDOS calls that are compatible with CP/M-86. XLT86 has special features for handling translation of conditional JMP and CALL instructions in 8080 source code. In the 8080 instructions, JMP and CALL instructions are capable of reaching any address within the 64K-byte region. The 8086 conditional JMP instructions can reach only 128 bytes on either side of the [[Instruction pointer|IP]] […] register. XLT86 examines the target of the conditional JMP. If the target cannot be reached, XLT86 changes the sense of the conditional JMP and skips over a long JMP to the target address. Since there are no conditional CALL or RET instructions in the 8086, the sense of the condition is changed and a short conditional JMP is performed to skip over an unconditional CALL or RET. […] the segment registers allow for separation of code and data regions. […] XLT86 examines an expression and determines the proper segment for the particular instruction. […]}} [https://archive.org/details/byte-magazine-1982-06] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0323.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0324.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0326.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0328.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0330.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0332.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0334.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0336.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0338.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0340.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0342.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0344.pdf] [https://www.americanradiohistory.com/hd2/IDX-Consumer/Archive-Byte-IDX/IDX/80s/82-83/Byte-1982-06-OCR-Page-0346.pdf] (13 pages)</ref>
<ref name="Warren_1982_Sorcim">{{cite journalnews |author-first=Jim C. |author-last=Warren, Jr. |author-link=Jim Warren (computer specialist) |title=Sorcim' Somethin' |series=Rumors Mongered Here |date=July 1982 |journalnewspaper=[[Silicon Gulch Gazette]] |volume=7<!-- derived, not printed on journal --> |number=30<!-- absolute number, not relative to volume --> |publisher=[[West Coast Computer Faire|Computer Faire]] |___location=Woodside, California, USA |pages=1, 2, 4, 6, 11, 14, 15 [11<!-- quote taken from page 11 -->] |url=https://amaus.net/static//S100/MAGAZINE/silicon%20gulch/30%20198207%20silicon%20gulch.pdf |archive-url=https://web.archive.org/web/20211130183655/https://amaus.net/static/S100/MAGAZINE/silicon%20gulch/30%20198207%20silicon%20gulch.pdf |url-status=usurped |archive-date=30 November 2021 |access-date=2020-01-15 |quote=[…] [[Sorcim]] just completed the purchase of [[Innovative Software Applications|ISA]]. […] They have also had an 8080-to-8086 translator – Trans-86 – operational for over a year […]}}</ref>
<ref name="CompuPro_1982">{{cite magazine |title=CompuPro |type=Advertisement |magazine=[[PC: The Independent Guide To IBM Computers]] |issn=<!-- not assigned at this time, but already applied for --> |volume=1 |number=1 |id=Premiere/Charter issue |publisher=[[Software Communications, Inc.]] |date=February–March 1982 |pages=70–71 |url=https://archive.org/details/bub_gb_w_OhaFDePS4C |access-date=2020-01-23 |quote=[…] WHY? FLEXIBILITY. [[CompuPro]]'s 85/88 CPU runs CP/M 80, 86, MP/M II and MP/M 86. We offer WORDSTAR dBASE II SUPERCALC a host of languages, 8080 to 8088 translators and more! COMPATIBILITY. Our systems can use CP/M 2.2 utilities to write programs for the IBM PC. You simply create 8088 source (either write it with your favorite CP/M 80 editor or translate it with [[Sorcim]]'s TRANS 86), cross-assemble your source (with Sorcim's ACT86), link your hex file (with CP/M 80's LOAD command), translate it to the IBM PC (with G&G's CPM-IBM program), and run it on your IBM PC! This procedure DOES NOT require MS-DOS! […] WHY? FLEXIBILITY. [[CompuPro]]'s 85/88 CPU runs CP/M 80 & 86 or MS-DOS. We offer WORDSTAR, dBASE II, TRANS86, XLT86, ACT86, SUPERCALC, CBASIC, MBASIC, MFORTRAN and more! […]}} [https://archive.org/stream/bub_gb_w_OhaFDePS4C/bub_gb_w_OhaFDePS4C_djvu.txt] [https://archive.org/download/bub_gb_w_OhaFDePS4C/bub_gb_w_OhaFDePS4C.pdf]</ref>
<ref name="Swaine_1982_CPM">{{cite news |title=Digital Research founder discusses his view of the business |series=Special section: CP/M |editor1-first=Michael |editor1-last=Swaine |editor-link1=Michael Swaine (technical author) |editor2-first=Paul |editor2-last=Freiberger |editor-link2=Paul Freiberger |editor3-first=John Gregory |editor3-last=Markoff |editor-link3=John Gregory Markoff |author-first=Gary Arlen |author-last=Kildall |author-link=Gary Arlen Kildall |date=1982-04-19 |newspaper=[[InfoWorld]] – The Newsweekly for Microcomputer Users |issn=0199-6649 |publisher=[[Popular Computing, Inc.]] |volume=4 |issue=15 |pages=23–24 |url=https://books.google.com/books?id=YzAEAAAAMBAJ&pg=PA23 |access-date=2020-01-17 |url-status=live |archive-url=https://web.archive.org/web/20200201160838/https://books.google.com/books?id=YzAEAAAAMBAJ&pg=PA23&lpg=PA23 |archive-date=2020-02-01 |quote=[…] Kildall: […] A year and a half ago I was probably spending 75% of my time on the business and 25% on programming. XLT-86 was a product I was working on at that time, and it took me nine months to do it. That would have been a three-month project if I had been able to concentrate on it. […]}}</ref>
<ref name="Hughes_1982_MS-DOS">{{cite magazine |title=CP/M-86 And MS-DOS: A Comparative Analysis |series=Operating Systems |author-first=David B. |author-last=Hughes |date=November 1982 |magazine=[[PC Magazine]] |publisher=[[Software Communications, Inc.]] |issn=<!-- not assigned at this time, but already applied for --> |volume=1 |number=7 |pages=181–182, 187–190 [189<!-- quote taken from page 189 -->] |url=https://books.google.com/books?id=vy3cBZkjbZgC&pg=PA189 |access-date=2020-02-10 |url-status=live |archive-url=https://web.archive.org/web/20200210202327/https://books.google.de/books?id=vy3cBZkjbZgC&pg=PA189&dq=combined+CP/M-80+DOS+opcode+program&hl=de&sa=X&ved=2ahUKEwjO7N2Q6MfnAhVS-6QKHTPADzcQ6AEwAHoECAAQAQ#v=onepage&q=combined%20CP%2FM-80%20DOS%20opcode%20program&f=false |archive-date=2020-02-10 |quote=[…] An impressive and useful array of software development utilities is a standard feature of [[MS-DOS]]. A program that translates [[8080]] or [[Z80]] code into [[8086]] source code, a linker, and a library runtime combine with a powerful assembler to give the programmer everything needed to take full advantage of the PC's 16-bit processor. The MS-DOS translation program allows the user to translate code developed under [[CP/M-80]] or [[SB-80]] […] 8-bit operating system […] to [[MS-DOS 1.2]] or [[MS-DOS 2.0|2.0]]. Some modification beyond simple translation may be necessary to get the programs to run on 16-bit systems, so I suggest that this tool be used primarily by a technically trained user. […]}}</ref>
<ref name="Bunnell_1982_CPM">{{cite magazine |title=Gary Kildall – The Man Who Created CP/M: CP/M's Creator – An Indepth PC-Exclusive Interview with Software Pioneer Gary Kildall |series=Operating Systems |editor1-first=David Hugh |editor1-last=Bunnell |editor-link=David Hugh Bunnell |editor2-first=Jim |editor2-last=Edlin |author-first=Gary Arlen |author-last=Kildall |author-link=Gary Arlen Kildall |date=June–July 1982 |magazine=[[PC Magazine]] |publisher=[[Software Communications, Inc.]] |issn=<!-- not assigned at this time, but already applied for --> |volume=1 |number=3 |pages=32–38, 40 [35<!-- quote taken from page 35 -->] |url=https://archive.org/stream/PC-Mag-1982-06/PC-Mag-1982-06_djvu.txt |access-date=2020-01-17 |quote=[…] PC: What are some of the complexities involved in translating a program from [[8080]] to [[8086]] form? [[Gary Arlen Kildall|Kildall]]: Straight translations at the source program level you can do pretty much mechanically. For example, an 8080 "Add immediate 5" instruction turns into an "Add AL 5" on the 8086 — very straightforward translation of the op codes themselves. The complexity in [[mechanical translation]] comes from situations such as this: The 8080 instruction DAD H takes the HL register and adds DE to it. For the 8086 the equivalent instruction would be something like ADD DX BX, which is fine, no particular problem. You just say the DX register is the same as HL and BX the same as DE. The problem is that the 8086 instruction has a side effect of setting the zero flag, and the 8080 instruction does not. In mechanical translation you end up doing something like saving the flags, restoring the flags, doing some shifts and rotates, and so forth. These add about five or six extra instructions to get the same semantic effect. There are a lot of sequences in 8080 code that produce very strange sequences in 8086 code; they just don't map very well because of flag registers and things of that sort. The way we get software over is a thing called XLT-86. It's been out six months or so. PC: By "better" code do you mean smaller? Kildall: Twenty percent smaller than if you just took every op code and did a straight translation, saving the registers to preserve semantics. PC: How does the size of the translated program compare to the 8080 version? Kildall: If you take an 8080 program, move it over to 86 land and do an XLT-86 translation, you'll find that it is roughly 10 to 20 percent larger. With 16-bit machines it's more difficult to address everything; you get op codes that are a little bit bigger on the average. An interesting phenomenon is that one of the reasons you don't get a tremendous speed increase in the 16-bit world is because you're running more op codes over the data bus. […]}}</ref>
<ref name="Laws_2014_IEEE">{{Cite web |title=Legacy of Gary Kildall: The CP/M IEEE Milestone Dedication |author-first1=Robert |author-last1=Huitt |author-first2=Gordon |author-last2=Eubanks |author-link2=Gordon Eubanks |author-first3=Thomas "Tom" Alan |author-last3=Rolander |author-link3=Thomas Alan Rolander |author-first4=David |author-last4=Laws |author-first5=Howard E. |author-last5=Michel |author-first6=Brian |author-last6=Halla |author-first7=John Harrison |author-last7=Wharton |author-link7=John Harrison Wharton |author-first8=Brian |author-last8=Berg |author-first9=Weilian |author-last9=Su |author-first10=Scott |author-last10=Kildall |author-link10=Scott Kildall |author-first11=Bill |author-last11=Kampe |editor-first=David |editor-last=Laws |date=2014-04-25 |___location=Pacific Grove, California, USA |type=Video transscription |id=CHM Reference number: X7170.2014 |publisher=[[Computer History Museum]] |url=https://archive.computerhistory.org/resources/access/text/2014/06/102746909-05-01-acc.pdf |access-date=2020-01-19 |url-status=live |archive-url=https://web.archive.org/web/20141227142045/http://archive.computerhistory.org/resources/access/text/2014/06/102746909-05-01-acc.pdf |archive-date=2014-12-27 |quote=[…] [[Thomas Alan Rolander|Rolander]]: I mentioned earlier that [[Gary Arlen Kildall|Gary]] liked to approach a problem as an architect. […] And he would draw the most beautiful pictures of his data structures. […] And when he finished that […] and was convinced those data structures were now correct, he would go into just an unbelievable manic coding mode. He would just go for as many as 20 hours a day […] he was just gone during these periods of time. On a couple of those occasions, when he'd get something running the first time, which could be in the middle of night. And all you who have written software have seen that, for example, that the first time it comes up on the screen, you’veyou've got to tell somebody. My wife Lori will tell you that I had a couple of those calls in the middle of the night, [[DR LOGO|LOGO]] was one example, XLT&nbsp;86 was another, where he got it running the first time, and he had to have somebody see it. So it didn't matter what time it was, he'd call me, I'd have to come over and see it running. […]}} [https://web.archive.org/web/20191002192143/https://ethw.org/Milestones:The_CP/M_Microcomputer_Operating_System,_1974<!-- https://ethw.org/Milestones:The_CP/M_Microcomputer_Operating_System,_1974 -->] [https://www.youtube.com/watch?v=HO6IPpL0y8g] (33 pages)</ref>
<ref name="Wharton_1994">{{Cite journal |title=Gary Kildall, industry pioneer, dead at 52: created first microcomputer languages, disk operating systems |journal=[[Microprocessor Report]] |publisher=[[MicroDesign Resources Inc.]] (MDR) |author-first=John Harrison |author-last=Wharton |author-link=John Harrison Wharton |volume=8 |number=10 |date=1994-08-01 |url=http://tech-insider.org/personal-computers/research/1994/0801.html |access-date=2016-11-18 |url-status=live |archive-url=https://web.archive.org/web/20161118222925/http://tech-insider.org/personal-computers/research/1994/0801.html |archive-date=2016-11-18 |quote=[…] Ironically, many of the techniques [[Gary Arlen Kildall|Gary]] pioneered are being rediscovered now, ten years later. [[Apple Computer|Apple]] and [[Digital Equipment Corporation|DEC]] are touting [[binary recompilation]] as a "new" technology for porting existing software to the [[PowerPC]] or [[DEC Alpha|Alpha]] architecture. Actually, DRI introduced an [[8080]]-to-[[8086]] binary recompiler in the early 1980s. […]}}</ref>
<ref name="SPA_1995">{{cite web |title=SPA Award to Dr. Gary A.Kildall: 1995 SPA Lifetime Achievement Award Winner |date=1995-03-13 |publisher=[[Software Publishers Association]] (SPA) |via=www.digitalresearch.biz |url=https://www.digitalresearch.biz/kildallr.htm |access-date=2019-12-21 |url-status=live |archive-url=https://web.archive.org/web/20191221150356/https://www.digitalresearch.biz/kildallr.htm |archive-date=2019-12-21 |quote=[…] [[Gary Arlen Kildall|Kildall]] founded [[Digital Research, Inc.]] (DRI) in 1976, which is now part of [[Novell]]. […] In the 1980's, DRI introduced a [[binary recompiler]]. […]}}</ref>
<ref name="Swaine_1997">{{cite journal |author-first=Michael |author-last=Swaine |author-link=Michael Swaine (technical author) |date=1997-04-01 |title=Gary Kildall and Collegial Entrepreneurship |journal=[[Dr. Dobb's Journal]] |url=http://www.drdobbs.com/architecture-and-design/gary-kildall-and-collegial-entrepreneurs/184410428 |access-date=2006-11-20 |archive-url=https://web.archive.org/web/20070124184442/http://www.ddj.com/184410428 |archive-date=2007-01-24 |quote=In March, 1995, the [[Software Publishers Association]] posthumously honored [[Gary Arlen Kildall|Gary]] for his contributions to the computer industry. They listed some of his accomplishments: […] In the 1980s, through [[Digital Research, Inc.|DRI]], he introduced a [[binary recompiler]]. […]}}</ref>
<ref name="Nelson_1988">{{cite book |title=The 80386 Book: Assembly Language Programmer's Guide for the 80386 |author-last=Nelson |author-first=Ross P. |publisher=[[Microsoft Press]] |series=Microsoft Programming Series |edition=1 |date=January 1989 |orig-yeardate=1988 |isbn=978-1-55615-138-5 |page=2 |quote=[…] An [[Intel]] translator program could convert [[8080]] assembler programs into [[8086]] assembler programs […]}}</ref>
<ref name="Guzis_2009_AMC">{{cite web |author-last=Guzis |author-first=Charles "Chuck" P. |title=Re: CP/M or similar OS for 64K Z8002? |work=Vintage Computer Forum |series=Genre: CP/M and MP/M |date=2009-01-21 |orig-yeardate=2009-01-17 |url=http://www.vcfed.org/forum/archive/index.php/t-13845.html |access-date=2020-01-15 |url-status=live |archive-url=https://web.archive.org/web/20200116043046/http://www.vcfed.org/forum/archive/index.php/t-13845.html |archive-date=2020-01-16 |quote=[…] both [[Zilog]] and [[Advanced Micro Computers|AMC]] offered [[Z80]]-to-[[Z8000]] translation programs. Like the [[Intel]] [[8080]]-to-[[8086]] translator, it resulted in immediate bloat unless you were willing to hand-optimize the result. Much early MS-DOS code was auto-translated and tweaked 8080 CP/M code. I know that much of [[SuperCalc]] for the PC was, for example. Early (e.g. 3.3) versions of [[Wordstar]] for DOS probably also were. […] There were Z80-to-Z8000 source-code translators, but it wasn't a straightforward process ("strict" and "relaxed" modes; sometimes one Z80-to-several Z8000 instructions). The 8086 is much closer to the 8080 than the Z8000 is to the Z80. […]}}</ref>
<ref name="Guzis_2013_ISIS">{{cite web |author-last=Guzis |author-first=Charles "Chuck" P. |title=Re: What if IBM didn't choose the Intel CPU! |work=Vintage Computer Forum |series=Genre: Others |date=2013-02-24 |url=http://www.vcfed.org/forum/archive/index.php/t-35844.html |access-date=2020-01-15 |url-status=live |archive-url=https://web.archive.org/web/20200116042606/http://www.vcfed.org/forum/archive/index.php/t-35844.html |archive-date=2020-01-16 |quote=[…] The original [[8086]] assembler ran on an [[8080]]-equipped MDS-80 dev system. One of the first products was a 8080 to 8086 source level translator. I recall that the speed of translation was phenomenally slow. […] our sales guy offered to run a conversion and verification test at the local sales office […] We […] started the job on the [[ISIS-II]] MDS 200 series there--they even had a hard disk, which was an outrageously expensive option for an MDS […] still crunching when we left for the night. It still wasn't done the next morning […] About 2 weeks later, after the [[Intel]] software guys had a look at the translator, Ed returned with the translated program. It was about 50% larger in size than the original [[8085]] version, which sort of went counter to Intel's claims for the translator. […]}}</ref>
<ref name="Guzis_2016_Translators">{{cite web |author-last=Guzis |author-first=Charles "Chuck" P. |title=Re: DOS code in CP/M? Revisited… |work=Vintage Computer Forum |series=Genre: CP/M and MP/M |date=2016-12-31 |orig-yeardate=2016-12-30 |url=http://www.vcfed.org/forum/archive/index.php/t-53239.html |access-date=2020-01-15 |url-status=live |archive-url=https://web.archive.org/web/20200116032911/http://www.vcfed.org/forum/archive/index.php/t-53239.html |archive-date=2020-01-16 |quote=[…] [[Intel]] had an ISIS-hosted translator from [[8080]]-to-[[8086]] code. I can remember spending a very frustrating day at the local Intel sales office with a sample bit of 8080 code--a basic [[binary-coded decimal|BCD]] floating-point package for the 8080 and waiting for hours for the translator to finish its work--and going home disappointed. About a week later, I received a call that they'd finally figured out the bugs and I could pick up my translated program. Said program was more than half-again as large as the original in terms of object bytes. I was a bit skeptical of the Intel claim back then that the 8086 code was far more compact than its 8080 counterpart. And the blasted thing didn't work anyway when it was put to the test. […] There were other 80-to-86 translators for [[CP/M]]. I recall that [[Sorcim]] had one. [[Advanced Micro Computers|AMC]] had a [[Z80]]-to-[[Z8000]] translator as well. […] The [Intel] translator had several levels of translation […] there was the "literal", preserving detailed operation […] it was [[ISIS-II]], running on an MDS-800, at, what, 2&nbsp;MHz with 8" floppies. […]}}</ref>
<ref name="Blumenfeld_1982">{{cite newsgroup |author-first=Dan |author-last=Blumenfeld |title=Z80 to 8086 translator |date=1982-12-04 |newsgroup=fa.info-cpm |url=http://mdfs.net/Archive/info-cpm/1982/12/04/040100.htm |access-date=2020-01-15 |url-status=live |archive-url=https://web.archive.org/web/20200116071746/http://mdfs.net/Archive/info-cpm/1982/12/04/040100.htm |archive-date=2020-01-16}} [https://groups.google.com/d/msg/fa.info-cpm/QVCzDa3SAL0/WhE09zX4GxkJ<!-- https://web.archive.org/web/20200201161821/https://groups.google.com/forum/ -->]</ref>
<ref name="Goldfarb_1982">{{cite newsgroup |author-first=Ben |author-last=Goldfarb |title=Re: 8080 to 8086 translation |date=1982-12-09 |newsgroup=fa.info-cpm |url=http://mdfs.net/Archive/info-cpm/1982/12/09/034933.htm |access-date=2020-01-18 |url-status=live |archive-url=https://web.archive.org/web/20200201161933/http://mdfs.net/Archive/info-cpm/1982/12/09/034933.htm |archive-date=2020-02-01 |quote=[…] The XLT86 program occupies approximately 30K bytes of main memory. The remainder of memory, up to the base of [[CP/M]], stores the [[program graph]] that represents the 8086 program being translated […] A 64K CP/M system allows translation of [[8080]] programs of up to approximately 6K. […]}} [https://groups.google.com/d/msg/fa.info-cpm/f0lhZNqlBIs/A2P0PDLxrbMJ<!-- https://web.archive.org/web/20200201162046/https://groups.google.com/forum/ -->] [http://www.retroarchive.org/cpm/cdrom/SIMTEL/ARCHIVES/CPM/8212-1.TXT<!-- https://web.archive.org/web/20151230043059/http://www.retroarchive.org/cpm/cdrom/SIMTEL/ARCHIVES/CPM/8212-1.TXT -->]</ref>
<ref name="BYTE_2018_MASM">{{cite web |title=Microsoft Macro Assembler (MASM) Unofficial Changelist |date=2018-08-21 |orig-yeardate=2016-09-08 |website=bytepointer.com |url=http://bytepointer.com/masm/index.htm |access-date=2020-01-18 |url-status=live |archive-url=https://web.archive.org/web/20190717203656/http://bytepointer.com/masm/index.htm |archive-date=2019-07-17 |quote=[…] [[Tim Paterson]] […] had the following to say about his [[8086]] Assembler he wrote while at [[Seattle Computer Products|SCP]]: "The 8086 assembler I wrote originally was in [[Z80]] assembly language and ran under [[CP/M]]. I believe it was distributed with the SCP 8086 CPU card as ASM86. I also wrote a translator that converted Z80 source code to inefficient but workable 8086 source code ([[Intel]] promoted this idea with a [[#Intel-1979-CONV86|published translation table]]). This was called TRANS86 and was also written in Z80 assembly for CP/M. Once [[DOS]] was working, I applied the translator to ASM86 (and to itself) to create 8086 versions that ran under DOS. I do not have the change history in front of me […], but I believe that versions >= 2 marked the translated (DOS) version. If any history shows version numbers < 2, that was the CP/M version." […]}}</ref>
<ref name="Intel_1978_CONV86">{{anchor|Intel-1978-CONV86}}{{cite book |title=MCS-86 Assembly Language Converter Operating Instructions For ISIS-II Users |id=Order No. 9800642A |version=A30/379/10K TL |___location=Santa Clara, California, USA |date=March 1979 |orig-yeardate=1978 |publisher=[[Intel Corporation]] |url=https://archive.org/details/bitsavers_intelISISIblyLanguageConverterOperatingInstruction_3712591 |access-date=2020-01-18 }} [https://archive.org/details/bitsavers_intelISISIblyLanguageConverterOperatingInstruction_3712591<!-- https://web.archive.org/web/20170531063333/https://archive.org/details/bitsavers_intelISISIblyLanguageConverterOperatingInstruction_3712591 -->] (NB. A newer version of this manual can be found [[#Intel-1979-CONV86|here]].)</ref>
<ref name="Intel_1979_CONV86">{{anchor|Intel-1979-CONV86}}{{cite book |title=MCS-86 Assembly Language Converter Operating Instructions For ISIS-II Users |id=Order No. 9800642-02 |version=A175/280/7.5 FL |___location=Santa Clara, California, USA |date=February 1980 |orig-yeardate=1978 |publisher=[[Intel Corporation]] |url=https://archive.org/details/bitsavers_intelISISImblyLanguageConverterFeb80_2443878 |access-date=2020-01-18 }} [https://archive.org/details/bitsavers_intelISISImblyLanguageConverterFeb80_2443878] [http://www.nj7p.info/Manuals/PDFs/Intel/9800642B.pdf<!-- https://web.archive.org/web/20200201162652/http://www.nj7p.info/Manuals/PDFs/Intel/9800642B.pdf -->] (NB. An older version of this manual can be found [[#Intel-1978-CONV86|here]].)</ref>
<ref name="Intel_1979_Family">{{cite book |title=The 8086 Family User's Manual |publisher=[[Intel Corporation]] |orig-yeardate=1978 |date=October 1979 |id=Order No. 9800722-03 |pages=((2{{hyphen}}74, 2{{hyphen}}92, B{{hyphen}}176)) |url=https://archive.org/details/bitsavers_intel80869lyUsersManualOct79_62967963 |access-date=2020-01-18 |quote=[…] other programs round out the software development tools available for the [[8086]] and [[8088]]. […] CONV-86 can do most of the conversion work required to translate [[8080]]/[[8085]] assembly language source modules into ASM-86 source modules. […] To facilitate conversion of 8080A/8085A assembly language programs to run on the iSBC 86/12A board CONV-86 is available under the [[ISIS-II]] operating system.}} [https://archive.org/details/bitsavers_intel80869lyUsersManualOct79_62967963<!-- https://web.archive.org/web/20190404122521/https://archive.org/details/bitsavers_intel80869lyUsersManualOct79_62967963 -->] [http://bitsavers.informatik.uni-stuttgart.de/components/intel/8086/9800722-03_The_8086_Family_Users_Manual_Oct79.pdf<!-- https://web.archive.org/web/20191127122240/http://bitsavers.informatik.uni-stuttgart.de/components/intel/8086/9800722-03_The_8086_Family_Users_Manual_Oct79.pdf -->]</ref>
<ref name="Garetz_1980_Sorcim">{{cite news |title=According to Garetz… |author-first=Mark |author-last=Garetz |newspaper=[[InfoWorld]] – News For Microcomputer Users |issn=0199-6649 |publisher=[[Popular Computing, Inc.]] |date=1980-12-22 |volume=2 |issue=23 |page=12 |url=https://books.google.com/books?id=nD4EAAAAMBAJ&pg=PT11 |access-date=2020-01-18 |url-status=live |archive-url=https://web.archive.org/web/20200201163107/https://books.google.com/books?id=nD4EAAAAMBAJ&pg=PT11&lpg=PT11 |archive-date=2020-02-01 |quote=[…] Last week was the semi-annual [[California Computer Swap Meet]]. This event is organized by John Craig […] [[Sorcim]] […] was debuting […] new products at the show […] Their other product was TRANS-86. TRANS-86 will take any [[CP/M]] compatible [[8080]]/[[8085]]/[[Z80|Z-80]] source code file and translate it into [[8086]] code. You can then assemble the new file with ACT-86. […]}}</ref>
<ref name="BYTE_1980_86-DOS">{{cite magazine |title=86-DOS – 8086 OPERATING SYSTEM - $95 |author=Seattle Computer Products |author-link=Seattle Computer Products |magazine=[[BYTE]] |issn=0360-5280 |id={{CODEN|BYTEDJ}} |date=August 1980 |volume=5 |number=8 |publisher=[[BYTE Publications Inc.]] |type=Advertisement |page=173 |url=https://archive.org/stream/byte-magazine-1980-08/1980_08_BYTE_05-08_The_Forth_Language#page/n173/mode/2up |access-date=2013-08-18 |url-status=live |archive-url=https://web.archive.org/web/20170405025551/https://archive.org/stream/byte-magazine-1980-08/1980_08_BYTE_05-08_The_Forth_Language |archive-date=2017-04-05 |quote=[…] 1. Read [[Z80]] source code file written in [[CP/M]] format and convert to [[86-DOS]] format. 2. Translator program translates Z80 source code to [[8086]] source code. 3. Resident assembler assembles the translated 8086 source code to 8086 [[object code]]. 4. Minor hand correction and optimization. (A recent 19K Z80 program translation took us about four hours to fix up. Even without optimization, it ran twice as fast as the original! […])}} [https://tech-insider.org/personal-computers/research/acrobat/8008-a.pdf<!-- https://web.archive.org/web/20200201163325/https://tech-insider.org/personal-computers/research/acrobat/8008-a.pdf -->]</ref>
<ref name="ARC_1988_Transpiler">{{anchor|ARC-1988}}{{cite magazine |title=Aus BASIC mach C: B→C Transpiler |trans-title=Turn BASIC into C: B→C Transpiler |author=ARC-Softwaresystems |___location=Esslingen, Germany |type=Advertisement |language=de |journalmagazine={{ill|[[:de:Amiga-Magazin|de}} - das Computermagazin für Amiga-FansMagazin]] |publisher=[[Markt & Technik Verlag Aktiengesellschaft]] |issn=0933-8713 |date=June 1988 |volume=1988 |issue=6 |page=101 |url=https://archive.org/details/AmigaMagazin198806 |access-date=2020-01-18 |url-status=live |archive-url=https://web.archive.org/web/20200201131207/https://archive.org/details/AmigaMagazin198806 |archive-date=2020-02-01 |quote=[…] Achtung [[C (language)|C]]- und [[Basic (language)|Basic]]-Programmierer! […] Jetzt gibt es den B→C TRANSPILER das einzigartige Umwandlungs-Software-System von ARC […] Der B→C TRANSPILER übersetzt lauffähige [[Amiga|AMIGA]]-Basicprogramme in compilierbaren C-Code. […] Durch Spezialbefehle kann C-Code in BasicproqrammeBasicprogramme direkt integriert werden. […] Basic-Befehle werden erweitert transpiliert. ([[HAM mode|HAM-Modus]], [[Interchange File Format|IFF]]<!-- or [[If and only if|IFF]]? -->, usw. werden unterstützt). […] Mit diesem Konzept neuester Generation verbindet der B→C TRANSPILER auf einzigartige Weise die Vorteile eines Interpreters mit denen eines Compilers […]}} [https://archive.org/details/AmigaMagazin198806]</ref>
<ref name="Pountain_1989">{{anchor|Pountain-1989}}{{cite magazine |title=Configuring parallel programs, Part 1: The Occam Transpiler, now under development, will make writing software for parallel processing easier |author-first=Dick |author-last=Pountain |magazine=[[BYTE (magazine)|BYTE]] |publisher=[[McGraw-Hill, Inc.]] |issn=0360-5280 |volume=14 |number=13 |series= |date=December 1989 |id=<!-- |ia=byte-magazine-1989-12 --> ark:/13960/t34188734 |pages=349–352 |url=https://archive.org/details/byte-magazine-1989-12/page/n382/mode/1up |access-date=2022-01-06 |quote-page=350 |quote=[…] The name ''Transpiler'' is meant to suggest a combination of [[transputer]] and [[compiler]], in just the same way that ''transputer'' was coined from ''[[transistor]]'' and ''[[computer]]'' (i.e., a computer that is also a component). […]}} (NB. Uses the term ''Occam transpiler'' as a synonym for a source-to-source compiler working as a [[pre-processor]] that takes a normal [[occam (programming language)|Occam]] program as input and derives a new Occam source code as output with link-to-channel assignments etc. added to it thereby ''[[computer configuration|configuring]]'' it for [[parallel processing (computing)|parallel processing]] to run as efficient as possible on a network of [[transputer]]s.)</ref>
<ref name="Sector7_1993_Transpiler">{{cite news |title=Transpiler |author=((Sector 7 Software Limited)) |___location=Bedford, Bedfordshire, UK |newspaper=[[Official Gazette of the United States Patent and Trademark Office]] |volume=1157 |edition=1 |date=1993-12-07 |orig-date=1992-09-22 |publisher=[[U.S. Patent and Trademark Office]] |page=TM&nbsp;81 |series=Class 9 |id=SN&nbsp;74-316.610 |url=https://books.google.com/books?id=Aokm04NulboC&pg=RA1-PA81 |access-date=2020-01-18 |url-status=live |archive-url=https://web.archive.org/web/20200201130513/https://books.google.de/books?id=Aokm04NulboC&pg=RA1-PA81&lpg=RA1-PA81&redir_esc=y |archive-date=2020-02-01 |quote=[…] Priority claimed under Sec. 44(D) on United Kingdom Application No. 1495953, filed 1992-03-31 Reg. No. A1495953, dated 1992-03-31, expires 1999-03-31. For computer software and programs (U.S. Cl. 38). First use 1991-08-01, in commerce 1991-08-01.}} (NB. This company develops products such as VX/BASIC, a BASIC-to-C transpiler for [[DEC VMS]]. Despite their claim, theirs is not the first public use of the term transpiler, see i.e. [[#ARC-1988|ARC's BASIC-to-C transpiler]] for the [[Commodore Amiga]] in 1988 and the [[#Pountain-1989|Occam Transpiler]] by Concurrent Technology Systems (CTS)<!-- by Meier and Wespi --> in 1989.)</ref>
<ref name="Ocam1">{{cite web |title=Overview |work=Js_of_ocaml - Reference Manual |publisher=Ocsigen |url=http://ocsigen.org/js_of_ocaml/manual/overview |access-date=2014-10-08 |url-status=dead |archive-url=https://web.archive.org/web/20181208123603/http://ocsigen.org/js_of_ocaml/manual/overview |archive-date=2018-12-08}}</ref>
<ref name="J2EIF">{{cite book |title=J2Eif Research Page – Chair of Software Engineering |date=2011 |pages=20–35 |doi=10.1007/978-3-642-21952-8_4 |publisher=Se.inf.ethz.ch |isbn=978-3-642-21952-8 |url=http://se.inf.ethz.ch/research/j2eif/ |access-date=2014-07-08 |url-status=live |archive-url=https://web.archive.org/web/20200101165402/http://se.inf.ethz.ch/research/j2eif/ |archive-date=2020-01-01}}</ref>
<ref name="C2EIF">{{cite web |title=C2Eif Research Page – Chair of Software Engineering |publisher=Se.inf.ethz.ch |url=http://se.inf.ethz.ch/research/c2eif/ |access-date=2014-07-08 |url-status=live |archive-url=https://web.archive.org/web/20200101165402/http://se.inf.ethz.ch/research/c2eif/ |archive-date=2020-01-01}}</ref>
 
<ref name="Skip">{{cite web |title=Skip |url=http://skip.tools/ |access-date=2024-05-17 |url-status=live |archive-url=https://web.archive.org/web/20240518013446/https://skip.tools/ |archive-date=2024-05-18}}</ref>
 
<ref name="Swiftify_Objective-C">{{cite web |title=Swiftify Objective-C to Swift Converter |url=https://objectivec2swift.com/ |access-date=2017-11-14 }}</ref>
<ref name="RuntimeConverter">{{cite web |title=Runtime Converter |url=http://www.runtimeconverter.com/ |access-date=2017-11-14 |url-status=live |archive-url=https://web.archive.org/web/20190710150000/http://www.runtimeconverter.com/ |archive-date=2019-07-10}}</ref>
Line 244 ⟶ 343:
|archive-url=https://web.archive.org/web/20120531090452/http://www.ece.umd.edu/courses/enee759m.S2000/papers/paterson1994-kildall.pdf |archive-date=2012-05-31 |quote=[…] To get major software developers to port their products from the [[8080]]/[[Z80]] to the [[8086]], I decided we had to make it as easy as possible. I had already written a Z80-to-8086 source code translator (hosted on the 8080 and [[CP/M]]). My plan was that running an 8080 CP/M program through the translator would be the only work required by software developers to port the program to the 8086. In other words, the interface used by applications to request operating system services would be exactly the same as CP/M's after applying the [[#Intel-1979-CONV86|translation rules]]. […]}}</ref>
<ref name="Paterson_2007_Design-DOS">{{cite web |title=Design of DOS |author-first=Tim |author-last=Paterson |author-link=Tim Paterson |work=DosMan Drivel |date=2007-09-30 |url=http://dosmandrivel.blogspot.com/2007/09/design-of-dos.html |access-date=2011-07-04 |archive-url=https://web.archive.org/web/20130120075653/http://dosmandrivel.blogspot.com/2007/09/design-of-dos.html |archive-date=2013-01-20 |quote=[…] [[CP/M]] Translation Compatibility […] For [[DOS]] to succeed, it would need useful applications (like word processing) to be written for it. I was concerned that [[Seattle Computer Products|SCP]] might have trouble persuading authors of application software to put in the effort to create a DOS version of their programs. Few people had bought SCP's 16-bit computer, so the installed base was small. Without the applications, there wouldn't be many users, and without the users, there wouldn't be many applications. […] My hope was that by making it as easy as possible to port existing 8-bit applications to our 16-bit computer, we would get more rogrammers to take the plunge. And it seemed to me that CP/M translation compatibility was what would make the job as easy as possible. [[Intel]] had [[#Intel-1979-CONV86|defined rules for translating]] 8-bit programs into 16-bit programs; CP/M translation compatibility means that when a program's request to CP/M went through the translation, it would become an equivalent request to DOS. […] So I made CP/M translation compatibility a fundamental design goal. This required me to create a very specific Application Program Interface that implemented the translation compatibility. I did not consider this the primary API – there was, in fact, another API more suited to the 16-bit world and that had more capabilities. Both APIs used CP/M-defined constructs (such as the "[[File Control Block]]"); the compatibility API had to, and I didn't see a reason to define something different for the primary API. […] I myself took advantage of translation compatibility. The development tools I had written, such as the assembler, were originally 8-bit programs that ran under CP/M ([[Cromemco DOS|CDOS]]). I put them through the translator and came up with 16-bit programs that ran under DOS. These translated tools were included with DOS when shipped by SCP. But I don't think anyone else ever took advantage of this process. […]}}</ref>
<ref name="Callahan_2021">{{cite web |title=Intel 8080 CP/M 2.2 to Intel 8086/8088 MS-DOS assembly language translator. |author-first=Brian |author-last=Callahan |date=2021-10-23 |orig-date=2021-07-06, 2021-06-06 |version=8088ify 1.2 |url=https://bestofcppcpp.codetea.com/repo/ibarathe-8088ifyfamous-intel-8080-cp-m-2-2-to-intel-8086-8088-ms-dos-assembly-language-translator/ |access-date=2021-11-28 |url-status=live |archive-url=https://web.archive.org/web/2021112819573620220331080628/https://bestofcppcpp.codetea.com/repo/ibarathe-8088ifyfamous-intel-8080-cp-m-2-2-to-intel-8086-8088-ms-dos-assembly-language-translator/ |archive-date=20212022-1103-2831}} [https://web.archive.org/web/20211128203526/https://codeload.github.com/ibara/8088ify/legacy.zip/refs/tags/v1.2][https://web.archive.org/web/20211128203442/https://codeload.github.com/ibara/8088ify/legacy.tar.gz/refs/tags/v1.2][https://web.archive.org/web/20211128203554/https://objects.githubusercontent.com/github-production-release-asset-2e65be/372560569/166a2a00-de48-11eb-9538-774018a65f2a?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20211128%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20211128T203554Z&X-Amz-Expires=300&X-Amz-Signature=bc71d0ebe4f0cb867fbfe1bb7d8ff6f701065adf783f4edffb973a794b4d28df&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=372560569&response-content-disposition=attachment%3B%20filename%3D8088ify-1.2.tar.gz&response-content-type=application%2Foctet-stream][https://web.archive.org/web/20210723171918/https://github.com/ibara/8088ify]</ref>
<ref name="Bodrato_2008">{{cite web |title=to86.awk source code |author-first=Stefano |author-last=Bodrato |date=2008-10-30 |version=1.6 |work=GitHub |url=https://github.com/z88dk/z88dk/blob/master/support/I86/to86.awk |access-date=2022-01-05 |url-status=live |archive-url=https://web.archive.org/web/20220105214202/https://github.com/z88dk/z88dk/blob/master/support/I86/to86.awk |archive-date=2022-01-05}}</ref>
<ref name="Coffeescript">{{cite web |title=List of languages that compile to JS |website=[[GitHub]] |url=https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS |access-date=2018-03-11 |url-status=live |archive-url=https://web.archive.org/web/20200123055351/https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS |archive-date=2020-01-23}}</ref>
<ref name="Maia_2020">{{cite web |title=Maia |url=http://maia-eda.net |access-date=2020-05-13}}</ref>
<ref name="Olivenbaum">{{cite web |title=h5 🚀 - C# to JavaScript compiler |author=theolivenbaum |website=[[GitHub]] |date=2021-11-13 |url=https://github.com/theolivenbaum/h5 |access-date=2021-11-14}}</ref>
<ref name="C2Rust">{{cite web |title=C2Rust repository |website=[[GitHub]] |date=2022-04-15 |url=https://github.com/immunant/c2rust/blob/master/README.md}}</ref>
<ref name="Intel_1983_ASM86">{{cite book |title=ASM86 Language Reference Manual |chapter=The 8086/8087/8088 Development Environment |date=November 1983 |orig-date=September 1981 |publisher=[[Intel Corporation]] |publication-place=Santa Clara, California, USA |id=Order Number 121703-003 |pages=1-1–1-2 |url=https://mark-ogden.uk/files/intel/publications/121703-003%20ASM86%20Language%20Reference%20Manual-Nov83%23Mar85.pdf |access-date=2023-11-28 |quote-page= |quote=}} (404 pages)</ref>
}}
 
== Further reading ==
* {{cite web |title=Translation of 8080 Code to 8086 - Microsoft Translation of 8080 Code to 8086 and Other 16-Bit Processors |author-first=Charles Randyl |author-last=Britten |date=2020-06-26 |url=https://retrocomputingforum.com/t/translation-of-8080-code-to-8086/1309 |access-date=2021-11-28 |url-status=live |archive-url=https://web.archive.org/web/20210723171914/https://retrocomputingforum.com/t/translation-of-8080-code-to-8086/1309 |archive-date=2021-07-23}}
* {{cite news |title=Programming of Sycor Units Eased With TAL II |newspaper=[[Computerworld]] – The Newsweekly for the Computer Community |issn=0010-4841 |publisher=[[Computerworld, Inc.]] |___location=Ann Arbor, Michigan, USA |date=1975-08-20 |volume=IX |number=34 |page=14 |url=https://books.google.com/books?id=tPYveN8W2qgC&pg=PA14 |access-date=2020-01-18 |url-status=live |archive-url=https://web.archive.org/web/20200201122051/https://books.google.de/books?id=tPYveN8W2qgC&pg=PA14&lpg=PA14&redir_esc=y#v=onepage&q&f=false |archive-date=2020-02-01}}
* {{cite web |title=8080 to 8086 ASM translator, with ASM source |author-first1=Frank J. |author-last1=Zerilli |author-first2=Craig |author-last2=Derouen |date=<!-- 1988-08-08 -->1986-12-11 |orig-yeardate=1985-08-15, 1984-12-20, 1984-11-20 |version=XLT86.COM 1.10 |work=[[SIMTEL]] |url=http://ftp.sunet.se/mirror/archive/ftp.sunet.se/pub/pc/mirror/simtelnet/msdos/asmutl/xlt86.zip |access-date=2020-01-18 |url-status=live |archive-url=https://web.archive.org/web/20200201123156/http://ftp.sunet.se/mirror/archive/ftp.sunet.se/pub/pc/mirror/simtelnet/msdos/asmutl/xlt86.zip |archive-date=2020-02-01}} [https://web.archive.org/web/20200201125052/http://msx2.org/NewPack/Mirrors/msx_ricardo_jurczky/imagem_msx_disco/F_/devel/asm/xlt86/<!-- http://msx2.org/NewPack/Mirrors/msx_ricardo_jurczky/imagem_msx_disco/F_/devel/asm/xlt86/ --> 1984-11-11 version 1.05] (NB. The [[DOS]] executable XLT86.COM [12&nbsp;KB] translates Intel 8080 assembly language source code to Intel 8086 assembly language source code. Despite its name this implementation in 8086 assembly is ''not'' related to Digital Research's earlier and much more sophisticated [[#XLT86|XLT86]].)
* {{anchor|PASMO}}{{cite web |title=Pasmo, ensamblador cruzado Z80 portable / portable Z80 cross assembler |language=es, en |author-first=Julián |author-last=Albo |date=2009-04-24 |url=http://pasmo.speccy.org/ |access-date=2020-02-20 |url-status=live |archive-url=https://web.archive.org/web/20200220234923/http://pasmo.speccy.org/ |archive-date=2020-02-20 |quote=[…] Pasmo is a [[Z80]] [[cross assembler]] […] that […] can generate object code in the following formats: raw binary, [[Intel HEX]], PRL for [[CP/M Plus]] [[Resident System Extension|RSX]], Plus3Dos ([[Spectrum +3]] disk), TAP, TZX and CDT (Spectrum and [[Amstrad CPC]] emulators tape images), [[AMSDOS|AmsDos]] (Amstrad CPC disk) and [[MSX]] (for use with BLOAD from disk in Basic). Starting with version 0.5.0 […] can also generate [[8086]] code from Z80 sources, in binary format for [[DOS|Ms-dos]] [[COM file|COM]] files or in [[CP/M-86|CP/M 86]] [[CMD file (CP/M)|CMD]] format. […]}} [https://github.com/mkoloberdin/pasmo] [https://github.com/mrcook/Z80Assembly/blob/master/docs/pasmo.md]
* {{cite magazine |title=Trump Card – Part 1: Hardware – Speed up your IBM PC with 16-bit coprocessing power |volume=9 |number=5 |date=May 1984 |pages=40–52, 54–55 |magazine=[[BYTE]] – The small systems journal |publisher=[[McGraw-Hill, Inc.]] |issn=0360-5280 |series=Ciarcia's Circuit Cellar |author-first=Steve |author-last=Ciarcia |author-link=Steve Ciarcia |url=https://www.americanradiohistory.com/Archive-Byte/80s/Byte-1984-05.pdf |access-date=2020-01-29 |quote=[…] It instead executes programs written in high-level languages such as BASIC and C (a Pascal compiler and a 8088 to Z8000 translator are in the works. […]}} and {{cite magazine |title=Trump Card – Part 2: Software – TBASIC and C compilers and an assemble |volume=9 |number=6 |date=June 1984 |pages=115–122 |magazine=[[BYTE]] – The small systems journal |publisher=[[McGraw-Hill, Inc.]] |issn=0360-5280 |series=Ciarcia's Circuit Cellar |author-first=Steve |author-last=Ciarcia |author-link=Steve Ciarcia |url=https://www.americanradiohistory.com/Archive-Byte/80s/Byte-1984-06.pdf |access-date=2020-01-29 |quote=[…] I expect that object-code translators for Z80-to-Z8000 and 8088-to-Z8000 conversions will soon be available […]}}, also available as {{cite book |chapter=Trump Card – Part 1: Hardware – Speed up your IBM PC with 16-bit coprocessing power & Part 2: Software – TBASIC and C compilers and an assemble |pages=138–152, 153–160 |title=Ciarcia's Circuit Cellar |volume=7 |author-first=Steve |author-last=Ciarcia |author-link=Steve Ciarcia |editor-first1=Daniel |editor-last1=Gonneau |editor-first2=Fred |editor-last2=Bernardi |editor-first3=Richard |editor-last3=Ausburn |publisher=[[McGraw-Hill Publishing Company]] |date=1990 |isbn=0-07-010969-9 |chapter-url=https://books.google.com/books?id=fBuiNpYlyHcC&pg=RA2-PA138 |access-date=2020-01-29 |url-status=live |archive-url=https://web.archive.org/web/20200201125917/https://books.google.com/books?id=fBuiNpYlyHcC&pg=RA2-PA138&lpg=RA2-PA140 |archive-date=2020-02-01}} {{usurped|1=[https://web.archive.org/web/20211130191536/https://amaus.net/static/S100/zilog/z8000/BYTE%20Trumpcard%20Z8000.pdf]}}
* {{anchor|MIGR2ST7}}{{cite web |title=Translating Assembly Code From HC05 To ST7 |id=AN1106/0200 |type=Application Note |author=Microcontroller Division Application Team |publisher=[[STMicroelectronics]] |date=2000 |url=https://www.st.com/content/ccc/resource/technical/document/application_note/4f/89/a9/95/41/e7/4f/4c/CD00004128.pdf/files/CD00004128.pdf/jcr:content/translations/en.CD00004128.pdf |access-date=2020-01-18 }} (9 pages) (NB. This software translator was developed by ST and translates [[Motorola]] [[Motorola 6805|6805]]/[[Motorola 68HC05|HC05]] assembly source code in 2500AD&nbsp;Software format into [[ST7 (microcontroller family)|ST7]] source code. The MIGR2ST7.EXE executable for [[Windows]] is available from "MCU ON CD".)
* {{cite web |title=What do people mean when they say "transpiler"? |author-first=Lindsey |author-last=Kuper |department=language implementation |date=2017-07-30 |website=composition.al |url=http://composition.al/blog/2017/07/30/what-do-people-mean-when-they-say-transpiler/ |access-date=2022-01-09 |url-status=live |archive-url=https://web.archive.org/web/20220109194650/http://composition.al/blog/2017/07/30/what-do-people-mean-when-they-say-transpiler/ |archive-date=2022-01-09}}<!-- ; {{cite web |title=My first fifteen compilers |author-first=Lindsey |author-last=Kuper |department=language implementation |date=2017-07-31 |website=composition.al |url=http://composition.al/blog/2017/07/31/my-first-fifteen-compilers/ |access-date=2022-01-09 |url-status=live |archive-url=https://web.archive.org/web/20220109220047/http://composition.al/blog/2017/07/31/my-first-fifteen-compilers/ |archive-date=2022-01-09}}; {{cite web |title=I have a draft blog post called "Stop saying 'transpiler'" |author-first=Lindsey |author-last=Kuper |date=2015-01-01 |url=https://twitter.com/lindsey/status/550513490658488320 |access-date=2022-01-09 |url-status=live |archive-url=https://web.archive.org/web/20220109194742/https://twitter.com/lindsey/status/550513490658488320 |archive-date=2022-01-09}} -->
 
== External links ==
* {{cite web |work=I2Z-Translator |title=Das Intel zu Zilog – Übersetzungsprojekt |language=de |date=2009-07-11 |author-first=Gabriele "Gaby" |author-last=Chaudry |url=http://www.prof80.de/i2zkurz.html |access-date=2020-01-18 |url-status=live |archive-url=https://web.archive.org/web/20160911054757/http://www.prof80.de/i2zkurz.html |archive-date=2016-09-11}}
* {{cite web |title=PortAsm Assembler to Assembler Translation |date=2017 |orig-yeardate=1996 |publisher=MicroAPL Ltd |url=http://microapl.com/Porting/PortAsm.html |access-date=2020-01-18 |url-status=live |archive-url=https://web.archive.org/web/20190730200919/http://microapl.com/Porting/PortAsm.html |archive-date=2019-07-30}}
* {{cite web |title=Our Methodology – The Source to Source Conversion Process |publisher=Micro-Processor Services, Inc. (MPS) |url=http://www.mpsinc.com/process.html |access-date=2020-02-01 |url-status=live |archive-url=https://web.archive.org/web/20190512171423/http://www.mpsinc.com/process.html |archive-date=2019-05-12}}
 
[[Category:Source-to-source compilers| ]]
[[Category:Utility software types]]