58

It's PL/I, promoted by IBM as the successor to FORTRAN, Algol 60, and COBOL. That's actual code as far as I recall, not pseudocode. PL/I had abbreviations for keywords; "DCL" is "DECLARE". It starts off by defining a procedure (routine) named P with one parameter, named MODE, which is a Boolean variable - BIT(1), then defines a bunch of 16-bit signed ...


51

it seems to be a simple bounding box check, as shown here from 6502 code disassembly, collision check between ship and saucer HitDetShip: L6A63: CPX #$01 ;Is object 1 not the player's ship? L6A65: BCS HitDetSaucer ;If not, branch. L6A67: ADC #$1C ;Ship hit box 42+28 = 70 X 70 from center. HitDetSaucer: L6A69: BNE ...


45

Like all games from that era, cheating and tables. Two 256 byte tables and logarithms gave a 10x speed boost on multiply and divide on Commodore 64 at least. Matrix operations using addition only for fixed known rotation rates. Lazy evaluation. Only convex shapes making hidden line removal simpler and hidden line removal meaning only half the vertices ...


32

Yes, it's possible to effectively change the volume if you're using Pulse Width Modulation (PWM), although the timbre of the note is also affected depending on playback hardware and psycho-acoustics. Dr. Blake Troise, who makes chiptunes under the moniker Protodome, describes how in a recent paper: The 1-Bit Instrument: The Fundamentals of 1-Bit Synthesis, ...


21

I am looking for information on a training language called "WhatDoesItDo". It was called WADUZITDO Well, for training purposes, you might check out the online-version at Waduzitdo.org. It hosts a faithful (*1) port to JavaScript (*2), even including a few quirks of the original 6800 version. It offers as well an online reference of all legal ...


21

FORTRAN was originally developed for the IBM 704 computer, which stored integers in sign-and-magnitude format. In the original documentation, it supports fixed-point variables, which used the machine’s native format, floating-point variables, and unsigned fixed-point constants, which were intended for line numbers and subscripts. These would be translated ...


19

I think the best you could do in some cases was alter the pulse width of the basic square wave the hardware could produce. That wouldn't really change the volume, but you could make the tone "thinner" or "fatter" at the same frequency. One advanced technique used by some composers and sound drivers was "dithering", in which high-frequency random noise was ...


16

The assembly (or, more rarely, compilation) was generally done on a minicomputer, such as a VAX 11. The tools were often written in-house. They might have some sort of simulation software to help test some of the code, but in the end you'd use a PROM burner to burn your code on to EPROMs (EEPROMs were not widely available in the '80s) and plug them into a ...


14

Any time you can pass a procedure (function, method) designation (address, reference) as a parameter to a procedure, that is a "callback". The reason why you're passing procedure B to procedure A is so that A can call B at some point, either synchronously or asynchronously. I think the concept is simply an obvious one which emerges as soon as subroutines (...


14

The keyword was inherited from B. B was a programming language with no type system at all: every variable held a machine word (corresponding to the int type in C), and the type of each value was determined by the operation performed. Since there was no type to specify for variables, the only thing to declare about a variable was its storage class; unlike in ...


13

Of course, there were hundreds of different standup arcade games, utilizing different hardware, and different developers creating software for them using different tools. So, there's no "one-size-fits-all" answer to your question. Rather, there were some general-purpose low-level ways of doing development back then that were fairly universal. First,...


13

The very name we have for one of the constructs -- "macro", short for "macroinstruction" -- comes from the assembly-language era, the prefix "macro" having its usual meaning (as a modifier) of something large, in this case larger than one instruction. A macroinstruction looks like an instruction in the assembly language, generally follows the same syntax ...


13

The year you've picked has a strong influence on the answer. By 1999, most new games were being released to run under 32-bit Windows using DirectX, and were therefore running in a demand-paged multitasking virtual memory system. This has two consequences: Checking available memory was no longer necessary - if you didn't have enough, the OS would emulate it ...


13

A CP/M implementation can be found in the SIG/M archives, volume 28 as waduzit.com, waduzit.doc and waduzit.pas. From the Pascal source: { +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + PROGRAM TITLE: What Does It Do? + + + + WRITTEN BY: Larry Kheriaty, ...


13

Why did Apple include shapes in Applesoft BASIC? Because they were introduced with the 'Programmers Aid #1 ROM' for Integer BASIC, so it was rather natural for Applesoft to support it as well. Shapes lack some useful features like fill and xor, To start with, there was a XOR mode. In addition, they provided features only vector graphic could add: ...


12

Essentially, you implement a 1-bit DAC in software. There are (at least) two ways to do a 1-bit DAC. For tweaking the brightness of an LED on e.g. an Arduino, one can use pulse-width modulation (PWM) using the hardware support. This does not produce the best-quality output, for which delta-sigma modulation is preferable. It's about the same amount of code ...


12

The Z80 can access all hardware I/O addresses in the C128, with the natural exception of the built-in I/O port (a 6520-style PIA) of the 8502 CPU. That means that, if I remember correctly, the only hardware that is not easily usable from the Z80 is the cassette the CAPS LOCK key of the US version (ASCII/DIN in German models, I don't know what it is called ...


11

The phrase In some cases a sufficiently smart compiler could figure out some of these precedence relationships. was used in the 1979 book: https://www.sciencedirect.com/science/article/pii/B9780120441204500088 Chapter 3 - SIMSCRIPT: PAST, PRESENT, AND SOME THOUGHTS ABOUT THE FUTURE HARRY M.MARKOWITZ Indicating that it predated Steele, and also that it ...


9

Games have "sets" (AKA versions). The software changes but not the hardware. For instance Pengo set 2 is harder than set 1 and has a different music (to avoid lawsuits?) If you can "mod" an existing game, then ignore the checksums, you could run your own game. You would have messages like: g8x_p6.bin WRONG CHECKSUMS: EXPECTED: CRC(7e3471d3) SHA1(...


9

Preprocessing is older than high-level languages. Macro systems came into use in the mid-1950s as ways to reduce the amount of assembler code that needed to be written and to make it easier to comply with programming standards. At first, pre-processors were separate programs, but they were followed by "macro-assemblers," which had built-in pre-processors, by ...


9

You can't tell if a .do/.po disk image file is in DOS order or ProDOS order unless you recognize something on the disk. If it has a DOS 3.3 or ProDOS filesystem, it's pretty easy. Otherwise... not so easy. If you want to see how CiderPress does it, take a look at the AnalyzeImageFile function here. After peeling off .gz/.zip, it checks the file extension....


9

Gordon Eubanks' BASIC-E for CP/M was written in PL/M around 1977. While PL/M is a fairly low-level systems programming language almost entirely targeting Intel processors, it's still higher level than directly targeting a specific processor in assembly language. BASIC-E compiles to an intermediate p-code, which is then interpreted by a separate runtime. So ...


9

BASIC for the MAI Basic Four minicomputer series was programmed in a version of TREE-META - a language for writing compilers in. I hesitate to call it a "high level language". TREE-META was more of a notation - very similar to BNF - with callouts to action routines. But it was not assembly language in any way. It was in fact an "attributed ...


9

You’re correct, the goal of this code is to ensure that the allocated buffer is entirely contained within the same DMA segment (DMA operates on 64KiB segments, not to be confused with the 16-byte-aligned real-mode segments of the x86 addressing model). The assumption that the allocator returns successive blocks is safe, at least before the heap gets ...


8

“Even though the amplitude is a constant 1-bit waveform, the narrower pulses provide a way of varying volume. These narrower pulses have incrementally less power overall to the listener; as the duty cycle approaches 0% (or, by inversion, 100%) the perceptual volume decreases with it, even though the amplitude remains the same. This effect is not a ...


8

I recently posted a disassembly of the Apple II version, which is substantially similar to the C64 and BBC Micro implementations. One of the things I focused on was the way meshes were stored and rendered. For each "hull definition" there are three tables: Vertices: 9-bit X/Y/Z coordinates, 5-bit level-of-detail value, 1-4 faces Edges: two vertex indices, ...


8

Or is there some other method I should use to invoke my calculated pointer? See Borland’s note on the subject: if you declare your function pointer as void far (*xms_driver_interface) (void); you can call it directly: (*xms_driver_interface)(); The note also shows how to construct the pointer in idiomatic Turbo C: xms_driver_interface = (void (far *)(void)...


8

The phrase any sufficiently advanced/smart/etc X in a technology context stems from (in other words, is a snowclone of) the Arthur C. Clarke's quote “Any sufficiently advanced technology is indistinguishable from magic” (1962 1973).


8

The Evolution of Lisp, an outline of the history, traces the phrase back to 1984. See page 42. https://www.scribd.com/document/62651058/The-Evolution-of-Lisp


Only top voted, non community-wiki answers of a minimum length are eligible