38

The PDP-10 had 'byte instructions' that could process a sequence of bytes of size 1 to 36 bits. The byte pointer was a word containing an 18-bit word address (and the usual index/indirect indications) plus position and size of the byte within the word. It was common to use 7-bit byte sequences for ASCII text, which gave 5 characters per word and one (...


35

Memory is allocated statically in Super Mario World. Every RAM location used is hard-coded into the game, although some are re-used by different parts of the code. A full, annotated, and searchable memory map for Super Mario World (archive) with 824 entries in RAM (4949 total) is presented at SMW Central. If you're interested in glitches due to re-used ...


22

The TRS-80 series is Z80 based, and Z80 uses, like all 8080 offspring (*1,3) a separate address space for I/O. It allows easy decoding for I/O. Thus memory address 0000h is different from I/O address 00h. On logical (program) level, access to either address space is selected by the instructions used. Memory instructions always access memory address space ...


17

Trust Vice. The information you obtained elsewhere is incorrect. Each line of the BASIC program is preceded by a pointer to the next line. Then, comes the line number. Following this is the tokens that make up the actual BASIC code of the line, and terminated by a null ($00). Then starts the next line (#2) with a pointer to line #3. The end of the BASIC ...


16

Amstrad used an off-the-shelf component, and did the best they could. For generating video addresses, sync timing, etc, Amstrad used the 6845 CRTC, which was originally designed for text displays. In particular it is designed for a linear text area, looking up character graphics from a font ROM, so e.g. if you’ve set up a 40-column display with 8px ...


16

As discussed and linked in this thread, Norbert Landsteiner has written a series of blog posts on masswerk.at that cover Commodore BASIC V2 internal program and data representation in detail and giving some code to do renumbering of BASIC programs and other interesting things. (He does this on a PET with v2 ROM; C64 is substantially similar but see my ...


15

The VT52 text terminal certainly doesn't qualify as a full computer, but it does have a processor running software out of a ROM. The RAM holding the displayed text is 2048 7-bit bytes. The character generator ROM is also 7 bits wide.


10

The eXtended Memory Specification (XMS) 2.0 may be found here and the 3.0 version here. The various function calls are invoked by obtaining the driver's entry point via the muxing interrupt (Int 2Fh). XMS allows for accessing both extended (above the 1MB boundary) and high memory areas. XMS works much like the original Windows 16-bit memory management: ...


10

The PDP-8 is a 12-bit computer.  As such it has a word and pointer size of 12-bits — meaning it can access 4k words using a single word pointer. Later models added bank switching (KM8E) and 3 extra address lines so that up to 32k words (8x4k) words could be populated, now having 15 address lines.  (Core memory boards, 4k words each, you ...


9

Trying to get more into the specifics of the BBC connection, there is a substantial hint in the user guide: However only 5 bits of the [user] port, and CB1, CB2 are used: This leaves bits 1,3 and 4 available for other uses. Which is backed up by the schematic provided by Simon Inns in the doco for SmallyMouse2; comparing that to the user port's pinout ...


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 ...


7

The second-generation Soviet computer Minsk-32 (the series size is 2889 machines, 1968-75, civilian use, one of the rare early mainframes noted for use in Antarctica) used a 37-bit word and 7-bit representation of alphanumeric characters (5 in a word). Yes, the concept of "bytes" is difficult to apply to a similar old computer (which continued the ...


6

Maybe I'm confused by your question, but have you tried LOAD'ing the PRG file? Loading memory is done with write operations. Write operations ignore ROM banking and always go to the underlying RAM location. Yes, your program initialization needs to bank-in the RAM it will be using, but the loading should work regardless of the initial banking setup.


5

Before the 286, x86 CPUs can only access 1MiB, so the only way to use memory beyond 1MiB is to use some form of bank switching. The de facto standard for that is Lotus/Intel/Microsoft EMS, which provides access to expanded memory by switching into a “page frame” (typically located in the UMA, between 640KiB and 1MiB). EMS requires hardware on CPUs before the ...


5

It might be useful in indirect threaded code. This is a contrived example based on my brief 45-years-ago acquaintance with a Snobol4 implementation (Macro Spitbol - Dewar and McCann). Consider that each statement is compiled into a sequence of 'code objects', each of which contains some standard attributes and also a pointer to the (fixed per type of code ...


5

Your intuition is right and you could write your own loader, of course. But the "standard" way we used to deal with this back in the day was to use a tool most often called a Packer. It typically accepts a list of memory blocks from disk and often lets you override load addresses of these units as well. Then it combines them into one, does a simple ...


4

I used an operating system with a MODCOMP minicomputer c. 1978 that had fixed partitioning. I believe it was the MAX III operating system and a MODCOMP II computer. During system build, you created partitions for foreground and real-time processes. The foreground partitions you could use for program development; the background partitions were for the real-...


4

The RSX-11 {D/M/M-PLUS/S} family of operating systems, running on PDP-11 minicomputers, divided real memory into partitions. Partitions were mostly set up at system generation time; you could define partitions in a running system, but that was less common. The RSX-11 family were a reimplementation, on the 16-bit PDP-11, of RSX-15 on the 18-bit PDP-15, so ...


4

The definition to which you linked is very specific, and you put a further constraint on it that the partitions must all be the same size (the definition to which you linked makes it clear they need not be; the example they give uses four "blocks," which I assume they feel is another word for "partition," of three different sizes). The ...


4

During the heyday of the Intel 80386, there were many operating systems that relied on that CPU's virtual 8086 mode to multitask programs that were written for x86 real-mode. By allowing real-mode programs to transparently use the segmented, 20-bit address space that they expected, these Operating Systems provided a fixed-size memory partition to each real-...


4

The Acorn MOS, as deployed in the BBC Micro, offers built-in support for paged ROMs. Paged ROMs have a fixed 16kb window in the address space, and amongst other things may contain filing systems, languages or other programs. A BBC or Electron fitted with more than one paged ROM will therefore have a fixed 16kb ROM window in which the current application ...


4

I don't know the specific details, but in general the mouse uses standard quadrature encoders so for each axis you get two data pins that output movement data. While several ways to decode the quadrature data for each edge to achieve maximum resolution, the hardware uses a simplest possible approach with the PIO chip. Basically a pulse on one pin can be used ...


4

This is how I did it in an old program I wrote to exercise my knowledge of the DMA DSP of the Sound Blaster, back in 1996. char *AllocDMABuffer (void) { char *pTemp; unsigned int Segm; pTemp=farmalloc(131072); if (!pTemp) return NULL; Segm=FP_SEG (pTemp); while (Segm & 0x0FFF) Segm++; return MK_FP(Segm,0); } For this specific ...


3

On the Amstrad CPC machines, the bottom and top of the address space was taken up by the firmware and the Basic ROMs respectively, each taking 16Kb from the 64kb, leaving 32kb for the programs and OS data. However they each shadowed 16KB of RAM. Each ROM could be paged in or out to allow full use of the memory. The setup allowed all writes to RAM, but reads ...


3

on ZX Spectrum 48K BASIC there are the PEEK and POKE commands which allow access to whole RAM/ROM. So any BASIC game can use the additional RAM. The memory map was this: 0000h ROM 4000h VRAM screen 5800h VRAM attr 5B00h buffer LP 5C00h system variables 5CB6h microdrive maps CHANS channels info 00h PROG BASIC source code VARS BASIC variables ...


3

More a side-note than an answer: There is the impressive Kung Fu Flash project which is doing exactly this and much more using a STM32F4 controller running at 168 MHz. It is all open source, so it should yield all the necessary information if someone is going to try something similar using a different controller.


3

According to the CPC schematic, the Armstrad uses a gate array to generate video, so we'd need to know how this gate array is programmed for an exact explanation. But expanding on the comment of supercat, we can do an educated guess: Assume we have an 8 bit shift register in the gate array, with a tap for bit C0 at the end, a tap for bit C1 in the middle, ...


3

The HIMEM.SYS is the driver which provides an API that complies with the XMS specification for you to allocate extended memory and move data between conventional memory and extended memory. The XMS specification can be found very easily. Accessing extended memory via XMS driver does not require any protected mode programming from the user and extended memory ...


3

Here's another off the road candidate: DoubleDuty for the TRS-80 Model 4 It split the 128 KiB main RAM of a full fitted Model 4 into two 64 KiB partitions, each able to run a stand alone application, plus a 16 KiB partition with just DOS. (Catalogue scan taken from the Radio Shack Catalog Archive)


3

TL;DR: MS-DOS does not assume any memory layout. It depends on programming language, language runtime and application code. The program can then use that segment however it pleases, Exactly that is how they do it. Each in its own way. The only common (since forced) is where the (start) code is loaded. MS-DOS does not make any assumptions beside jumping to ...


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