Dumb modern computing question: Let's say you wanted to write and run programs written in x86 or x86-64 assembly language or raw machine code under a modem OS (Windows, linux). You wouldn't necessarily need them to run as standalone applications. How would you do that without having the OS explode or light you on fire?

My last experience with assembly was on the RC2014 running CP/M on a real Z80. You boot into the OS, Load your code into memory, jump to the top of your code, and your code either crashes, hangs, or exits cleanly hitting the end of memory and jumping back to the start where the operating system lives.

There's basically no protection or interference by the OS - the whole system is a marvel of simplicity that gives the illusion of a lot more complexity and smartness than is actually present.

For very good reasons, multiuser operating systems don't let you do this. I'm woefully ignorant of modern low-level programming and how to work within the OS's security framework without having to add a ton of baggage to a few dozen instructions.

I'm wondering if I should just punt on writing assembly for the machine's actual CPU and instead just learn how to use simh and do everything in emulation. The big picture goal is to simulate the process of writing and running scientific code as if it were 1955 and high-level languages don't yet exist. x86 or x86-64 have the benefit of being accessible and allowing both fixed and floating-point operations - I dont know that Z80, 8080, or 6502 allow that (floating point was often software only). Regardless, most people only have those systems available via emulation so if emulation is necessary, maybe emulating an IBM 704 or UNIVAC might be a better example than trying make code run on real x86-64 hardware.

FYI: Open SimH https://opensimh.org/ is an emulator for a wide variety of historical computers. Rather than targeting the x86 family of CPUs, I think I should instead target the IBM 7090 or 7094. IBM's first scientific computer was the 704 which is the machine FORTRAN was originally developed for. The 704 was replaced by the 709 which was then converted from vacuum tubes to transistors and released as the 709T. Due to homophonic issues and customer confusion, the IBM 709T was renamed the IBM 7090 and was later upgraded to the IBM 7094.

Confused yet?

So to recap, my goal is to illustrate how a subject matter expert would have had to formulate a solution to a simple engineering problem so it was amenable to computer solution, then program that solution using raw machine code or assembly language with the assumption that a high level language (FORTRAN, JOSS, ALGOL, etc.) was not yet available. The point of the exercise is like washing a load of farm clothes by hand to understand the amount of effort involved and why the invention of the washing machine (or by analogy, FORTRAN) was such a big deal for people doing the actual work.

This is sort of the opposite of nostalgia - to show how much effort is completely eliminated by 65-year-old technology that we generally take for granted today.

The Open SIMH Project

Open SimH - Bringing Antiquities back to life

Open SIMH

A more complete example would involve a mechanical desk calculator, a slide rule, and mathematical tables like Abramowitz and Stegun ("Handbook of Mathematical Functions") https://www.nist.gov/mathematics-statistics/handbook-mathematical-functions-abramowitz-and-stegun Prior to the use of digital electronic computers, complex numerical problems were translated to manual computing plans and solved by teams of human "computers", often women with degrees in math who were locked out of university and technical jobs.

This is sort of the origin of #researchsoftwareengineering - the relationship between subject matter experts who understand a problem domain and the pure and applied math underpinning a solution and the experts in numerical analysis and computation who could convert that mathematical solution into a plan or program suitable for automatic computation whether the computer was electronic or human.

I'm mainly interested in the evolution of digital computing techniques here but it would take very little to make this a complete example that covered all of 20th century computing and broaches some very uncomfortable facts about gender and race in computing long before ENIAC. Not my primary focus but I'd feel remiss in not calling it out.

Handbook of Mathematical Functions: Abramowitz and Stegun

Date: 1964

NIST

Fun fact about the Handbook of Mathematical Functions. You know who wanted to kill this project? Republicans. Why? The mathematical tables project under NBS was instigated by the Works Project Administration (WPA) under FDR which was widely criticized by Republicans as being Communist.

Yes, you have that right. Tables of logarithms and Bessel functions are Communist.

"When Computers Were Human" by David Alan Grier* is a fantastic book that details the history of the Handbook of Mathematical Functions and the work of Irene Stegun and Milton Abramowitz. It's a wonderful and fascinating book that provides a ton of context for the transition from human to electronic computing. Programming was done for decades before electronic computers existed but you wouldn't know that from the way computer history is taught. Looking at who was doing that work explains a lot about why it's not typically taught as history. https://press.princeton.edu/books/paperback/9780691133829/when-computers-were-human

*Not the one from the cast of In Living Color, sadly.

When Computers Were Human

@arclight
Fascinating! Being an engineer I always had Mathematical Functions nearby. I recently found When Computers Were Human in a thrift store and thought it looked like a good read. Now I guess I'll have to read it.

@arclight One of the books - a very paper one - on my shelf has the title "14,000 Gear Ratios".

I imagine someone at a Frieden calculator for months creating that text.

(My father used that book to design electrical transformers - a place where ratios of windings are rather important.)

The book is still available on Amazon.

@arclight
7094 was the first one I mangled Fortran on.