Changes

CP/M 2.2

110 bytes added, 17:04, 5 May 2018
/* Memory Map */
=== Memory Map ===
CP/M runs with ram selection 0 (i.e. LD BC,&7FC0:OUT (C),C ) and assumes the upper ROM is selected (in this case AMSDOS). Therefore if you patch enabled and need to change is the ROM, then you should store and re-store one with the upper ROM using the firmware functionsCPM BIOS in it (i.e. It seems that AMSDOS doesn't use all it's work ram. )
The alternate register set Therefore if you patch CPM you need to:- ensure the RAM selection state is setup for as expected- the upper ROM is enabled and AMSDOS ROM is selected (this can be done using firmwarefunctions to get the current rom state and number and restore it).- avoid touching AMSDOS/firmware areas unless you are also patching it.IY = &ac48?? - is this restore the base of AMSDOS??alternative registers if you modify them.
The lower firmware jumpblock exists at &0000-&0040 because it is needed by the firmware jumpblock to call into the OS rom. The following changes are made for CP/M 2.2:
* &ad00 - &ad32 => CPM BIOS jumpblock.
Each entry is a JP instruction. (The address of this can be calculated from CP/M if you need to patch it. Take the address at &0001/&0002 and subtract 3 to give the address of the boot JP instruction). These jumps including enter/exit firmware can be patched.
If you plan to patch it for additional hardware and need memory then you will need to use MOVCPM to reduce the TPA size.
* &b900 - &be00 => main firmware jumpblock
* &be40 - &be7f => used by AMSDOS and locates the XDPB for each drive.
* &be80 - &bebf => CP/M 2.1 BIOS extended jumpblock. (functions here used by conin, conout, lstst, list, punch, reader, const and action depends on iobyte. These can also be patched. )
* &bec0 - &bfff => stack
* &c000 - &ffff => screen
2,562
edits