▲ | PennRobotics 3 days ago | ||||||||||||||||
Some of the early Microprose games used this, and it was clever for two reasons: First, more functionality. The minigames and intro/conclusion scenes were their own executables that made use of the original, generated game data. These got loaded into RAM on top of the original executable and then called. Second, graphics and sound were also overlays. Rather than having useless-to-most Roland MT-32 code in the binary, this was only loaded if requested. There were overlays for Sound Blaster, PC speaker, and Adlib. If your monitor only supported four colors (CGA) there was an overlay for that. A post would be nice, although you basically described most of it. An .OVL file with a non-zero overlay number is loaded into memory with INT 3Fh (although strangely enough any interrupt number could be chosen?, and the interrupt also would call the desired function after loading into memory). These overlays are loaded as-needed into a shared memory space. I'd be more curious to see how one would have programmed those overlays in Microsoft C Compiler 3.0. More recent compilers seemed to have better menus and documentation for the memory models, but it seems like they were clairvoyant by squeezing every bit of functionality out of version 3.0 that was made easier by Watcom/Borland/MS 5.0. (Then again, they would have evolved their build system with every successful release and every new hire, plus it was their full time job to "figure that crap out", and maybe Microsoft improved their approach to overlays in response to Microprose and others calling all the time) The documentation states only one EXE is generated, but Microprose had multiple EXE files. Is it possible those weren't overlays but something very similar? Or did they just change the file extensions? The docs also show the syntax "Object Modules [.OBJ]: a + (b+c) + (e+f) + g + (i)" where everything in parentheses is an overlay. But this isn't elaborated. What are the plus signs? How are these objects grouped? Would their list look like "preload + (cga + mcga + ega + vga) + (nosound + tandy + pcspkr + roland + sb) + (intro) + (newgame) + (maingame) + (minigamea) + (minigameb) + (outro)"? Or would every module be individually parenthesized, and those with plus symbols are interdependent (e.g. not alternatives)? (One website using BLINK seems to suggest the latter.) I know there are a lot of DOS tutorials (FreeDOS YT channel, blog posts) but I haven't found one that does a start-to-finish overlay example. | |||||||||||||||||
▲ | achairapart 2 days ago | parent | next [-] | ||||||||||||||||
See: https://neuviemeporte.github.io/f15-se2/2023/07/12/overlays.... From this series: https://neuviemeporte.github.io/category/f15-se2.html Related HN thread: https://news.ycombinator.com/item?id=40347662 | |||||||||||||||||
| |||||||||||||||||
▲ | pjmlp 2 days ago | parent | prev | next [-] | ||||||||||||||||
Borland compilers and Clipper supported them directly. Chapter 18, TP 3 and 7, to show its evolution http://www.bitsavers.org/pdf/borland/turbo_pascal/Turbo_Pasc... http://www.bitsavers.org/pdf/borland/turbo_pascal/Turbo_Pasc... TC++, page 211 https://bitsavers.org/pdf/borland/turbo_c/Turbo_C++_Programm... Clipper, section 7-18 https://archive.org/details/Clipper_Compiler_for_dBASE_III_a... | |||||||||||||||||
| |||||||||||||||||
▲ | int_19h 2 days ago | parent | prev | next [-] | ||||||||||||||||
The original X-COM (aka UFO: Enemy Unknown), despite being 32-bit, had two completely separate executables for the strategy part and the tactical combat part. The game basically dumped the relevant state like inventory to disk and then exited and relaunched the other process at switch points. | |||||||||||||||||
▲ | globalnode 2 days ago | parent | prev [-] | ||||||||||||||||
micropose and their floppy disk protection argh!!!, couldnt even backup a purchased game, and you know how long those disks lasted... |