On compiling. (Was a way off topic subject)
paulkoning at comcast.net
Thu Jun 24 10:02:50 CDT 2021
> On Jun 24, 2021, at 1:02 AM, ben via cctalk <cctalk at classiccmp.org> wrote:
> On 2021-06-23 6:48 p.m., Paul Koning via cctalk wrote:
>> Somewhat related to the point of compiling and executing mixed together is a very strange hack I saw in the Electrologica assembler for the X8 (the company issue one, not one of the various ones built at various labs for that machine). It is essentially a "load and go" assembler, so the code is dropped into memory as it is assembled, with a list of places to be fixed up rather than the more typical two pass approach. You can use a variation of the usual "start address" directive to tell the assembler to start executing at that address right now. In other words, you can assemble some code, execute it, then go back to assembling the rest of the source text. Cute. Suppose you want to do something too hard for macros; just assemble its input data, followed by some code to convert that into the form you want, then go back to assembling more code. And that can start by backing up the assembly output pointer ("dot") so the conversion code doesn't actually take up space in the finished program.
>> It sure makes cross-assemblers hard, because you have to include an EL-X8 simulator in the assembler... :-)
> But at least it not a 386. Did any other computers have built in rom or protected core used as rom for 'standard' routines like I/O or floating point.
Sure. A few examples:
The Electrologica X1 (from 1958) has what one might call the first BIOS, in core ROM; the standard version (by E.W. Dijkstra, see his Ph.D. thesis) contains basic I/O services, a rudimentary assembler, and some operator interface mechanisms. Customers could order additional ROM, and several did to add run time library routines for their compilers to the ROM, things like floating point operations since the hardware did only integer arithmetic.
The Electrologica X8 (1964) had an I/O coprocessor called CHARON which the main machine talks to via semaphores and queues; it does the detailed control of the various peripherals. It either came with ROM or with read/write core loaded at the factory, I'm not sure. It wasn't customer-programmable.
The IBM 360/44 (early 1970s) with the very obscure Emulator option implements an emulation of the string and decimal instructions of the 360 instruction set in an emulator that lives in a separate memory, not addressable from the normal execution environment. It's read/write core memory, loaded (if it ever gets messed up, which I never saw happen) from a binary card deck using the "Emulator IPL" console button.
I assume the Apollo Guidance Computer (1968 or thereabouts) is an example since it has a substantial core ROM, and also I believe loadable programs, but I don't know the details.
There probably are quite a lot more but those are a few I know of.
More information about the cctalk