Will,
The M100 main rom supports CP/M, i suppose that is obvious.
Cpm memory space is totally separate from the M100 memory.  Both the upper
and lower 33k banks are RAM for cpm.  In m100 mode, you have the standard
main rom in the lower 32k, and different ram in the upper 32k.

To get full control of the m100 in cpm you need to access the main rom
routines.  Well, you could rewrite all the routines but why when the main
rom is there.  ;)


As John mentioned since the main rom isn't directly available in cpm you
need trampoline code to switch it into view so you can call routines.

I'm not near all my info so I can't recall the exact details but certainly
there is a trampoline included in m100 cpm.


So the trick is to call the trampoline with a pointer to your target
routine, along with register data to feed the routine.

If I can figure out the trampoline I will send a note.

Steve

On Sunday, March 17, 2024, Will Senn <will.s...@gmail.com> wrote:

> Hi All,
>
> I've been digging into assembly language programming on the M100 and the
> documentation is fragmented, to say the least and so progress is stilted a
> bit. I've made significant progress on the programming toolchain - CP/M is
> great for this. It gives a rational file system, ed, asm, load, ddt, a way
> to run the app, a way to display the source, listings, etc. VEDIT is
> available as a visual editor, but editing on a host and running on CP/M is
> workable and fast. I've also gotten MAC, RMAC, and LINK working which is
> nice.
>
> CP/M provides functions that are callable in assembly code and I've made
> good progress on how to make CP/M work for simple I/O and File I/O. But,
> the M100 has features, like the LCD, the serial and parallel ports, etc.
> that make it unique. Is the assembly language CP/M programmer left on their
> own to interface with these devices or are they given access to something
> akin to BIOS (maybe the ROM functions) to make it easier?
>
> Say that I want to place a pixel, or draw a line, or whatnot. Does CP/M
> have any machine level routines to call, or what? Can I call the ROM
> routines from CP/M? I saw some trampoline code on the wiki, some language
> saying that it was tricky to do, a pointer to some old docs, etc. Is that
> the way forward - call the main rom from CP/M as described in
> https://bitchin100.com/wiki/index.php?title=Calling_the_
> Main_ROM_from_Option_ROM, or, is it a matter of programming the ports?
>
> On the one hand, my questions are simple - how do I put a pixel on the
> screen at a give location and erase it when I want to? With minimal fuss.
> On the other hand, I'm curious about how CP/M and the M100 coexist and what
> overlap exists between the two when CP/M is active.
>
> Thanks,
>
> Will
>
>

Reply via email to