My System: CP/M and 'Overlays'

75 views
Skip to first unread message

Michelle Lawson

unread,
Dec 17, 2025, 11:29:07 AM (2 days ago) Dec 17
to RC2014-Z80
My intended use of my RC2014 Pro system is to be a CP/M based 'server' for my other CP/M machines; hence the two 85C30 boards I'm building out to add. My 'Server' code will still load at 0100h but will relocate and execute from CBASE minus something less than 8K. I'll call that 'new' location 'SBASE'....

As to the 'overlay', that would be some command within my server code, that may be used sporadically and not regularly. A 'regular' command/function would be along the lines of displaying status to the console of a client request, or to log the status in the log file. A 'sporadic' command would be something like the code needed to print a client requested file. So, how then to load and execute that via a 'call' within the Server program.....

Well, I think I came up with a way.... Overlays would be assembled to execute at SBASE minus 1K, and upon completion, would execute a RET back to the Server program.
1. Upon getting a client request to execute a function/command that requires an overlay, the Server program, using CP/M functions, would read the overlay from disk and into address 0100h. 
2. The Server program would then relocate the overlay from 0100h to SBASE-1K. 
3. The Server program would then CALL the overlay at address SBASE-1K.
4. When complete, 'return' to the Server program.

I'm sure 'overlay' isn't the most technically accurate name for what this is, but it's what is in my head, so I'll go with that for now. So, if anyone has any comments or suggestions, I'd love to hear them. This is certainly newly charted territory for me... Thanks

Alan Cox

unread,
Dec 17, 2025, 11:48:34 AM (2 days ago) Dec 17
to rc201...@googlegroups.com
On Wed, 17 Dec 2025 at 16:29, Michelle Lawson <michelle...@gmail.com> wrote:
I'm sure 'overlay' isn't the most technically accurate name for what this is, but it's what is in my head, so I'll go with that for now. So, if anyone has any comments or suggestions, I'd love to hear them. This is certainly newly charted territory for me... Thanks

Only thing I can think of is that tools that do this kind of thing under CP/M (SUBMIT being the obvious one) normally load and relocate themselves to the top of memory below the CCP and then adjust the pointers so that programs see a new top of TPA. That allows you to run standard CP/M programs not just specialized overlays and also means you can build things with the standard CP/M tools without changes.

CP/M 3 sort of formalized this with the RSX functionality but 2.2 you can do it by hand just fine.
 

Bill Shen

unread,
Dec 17, 2025, 2:46:40 PM (2 days ago) Dec 17
to RC2014-Z80
One thing I’ve thought about but haven’t done any real works is preloading several CP/M applications in the low 32K banks of 512K RAM/ROM board and have a small resident program in high memory similar to RSX that schedule which programs to run based on timer ticks or serial interrupts.  Has something like this been done?  I have a RC2014-compatible Z80 SBC with 8 meg of banked memory, I really like to put it to realistic uses.
Bill

Alan Cox

unread,
Dec 17, 2025, 3:06:31 PM (2 days ago) Dec 17
to rc201...@googlegroups.com
On Wed, 17 Dec 2025 at 19:46, Bill Shen <coinst...@gmail.com> wrote:
One thing I’ve thought about but haven’t done any real works is preloading several CP/M applications in the low 32K banks of 512K RAM/ROM board and have a small resident program in high memory similar to RSX that schedule which programs to run based on timer ticks or serial interrupts.  Has something like this been done?  

Yep - that's basically MP/M you are describing. Slightly different BIOS to CP/M and some other oddments but very similar. With 32K banks you'll be limited to smaller apps except for the one large one.

There were also "switcher" type apps that hooked into the BDOS and BIOS entry points so that you could "hotkey" between apps, either by swapping ones to disk and loading another or by memory bank switching. 

Ed Silky

unread,
Dec 17, 2025, 11:36:25 PM (2 days ago) Dec 17
to rc201...@googlegroups.com
We used an ALTOS MP/M system for data collection and processing of test results from our test/service technicians. I wrote the program that collected data and stored it on disk and another that would do some processing on it and print reports. Our main engineering system was a Dec running BSD UNIX, but we weren't really allowed to connect anything but standard terminals to it (we used IBM-3101's). So we used the ALTOS MP/M box, as we had full control of it.

--
You received this message because you are subscribed to the Google Groups "RC2014-Z80" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rc2014-z80+...@googlegroups.com.
To view this discussion, visit https://groups.google.com/d/msgid/rc2014-z80/CAK9X0%2BtHz7hvk6vUy9%2BWUsVP9NLUA0qS0TdDK0Un5%2BVSHR590w%40mail.gmail.com.

Bill Shen

unread,
Dec 18, 2025, 12:26:07 AM (yesterday) Dec 18
to RC2014-Z80
Hmm, never thought of MP/M that way.  So since memory banking logic is in CPLD, I think it should be possible to remap banks to 48k/16k split.  The drawback is 32/32 split fully utilize all memory, but 48/16 will waste 16k for every 64k block except for the top 64k.  So for 8 meg RAM system, that’s 128 banks of 48K and one common 16K located at the top of the physical RAM.

Mark T

unread,
Dec 18, 2025, 2:09:32 AM (yesterday) Dec 18
to RC2014-Z80
If you are mapping in 16k chunks then for every 3x64k you get 4x48k banks. So for 512k ram you could have 10x48k banks.

Tadeusz Pycio

unread,
Dec 18, 2025, 2:56:34 AM (yesterday) Dec 18
to RC2014-Z80
Yes, using MP/M would be the best solution. The problem with this operating system is its primitive memory manager, which is a result of the date of creation of this operating system and the availability of RAM at that time. That is why there is this rigid division (in the most favourable case) of 48/16 kB and a limitation to 8 memory banks. It will not support more than 512 kB without modifying the operating system software itself.
Reply all
Reply to author
Forward
0 new messages