Changes

Jump to: navigation, search

CP/M 3.0

1,267 bytes added, 10:59, 7 July 2019
/* Amstrad's implementation of CP/M+ */
c) Page C6 has &8000-&bfff of the TPA.
d) Page C7 has &c000-&f2fb of the TPA. From &f2fc to &ffff is the trampoline code which transitions * to 1st bank of 64KB.
 
=== Extra memory ===
 
CPM+ on the CPC uses 128KB of memory. Therefore selections C4,C5,C6,C7 must be avoided if you have additional memory. Due to the design of DkTronic's compatible RAM expansions all memory accesses to additional RAM must occur from bank 0 (i.e. 'C0') and be transferred to the TPA in bank 1 (i.e. 'C2').
 
Therefore access to the additional RAM follows a pattern such as this:
* From running CPM program in bank 1 you need to go via code in C000-FFFF to transition to bank 0. This can be done using 'userf'.
* Within bank 0, your extra memory access code must lie within the regions 0000-3FFF or 8000-BFFF. 4000-7FFF is where the paging will take place so is out of bounds. C000-FFFF is where the memory trampoline code is paged in and out so using this area is much harder.
* Remember the current memory configuration (e.g. C1,C3,C0)
* In bank 0 set the memory selection (e.g. 'CC') then perform your read from the extra RAM into a temporary buffer within one of the safe areas. For write you copy from a safe area into the extra memory.
* Then you need to restore the memory configuration (e.g. C1,C3,C0) and trampoline back to the TPA.
 
Therefore extra memory access on the CPC is not as fast as it could be compared to running under AMSDOS.
=== Implementing a storage device driver ===
2,541
edits