Changes

Jump to: navigation, search

CP/M 2.2

2,818 bytes added, 16:55, 5 May 2018
/* Amstrad's implementation of CPM 2.2 */
CP/M 2.2 was distributed with the DDI-1 disc interface, the CPC664, and on side 1 of the CPC6128 system discs. It provided 41K TPA.
 
=== Contents ===
 
==== CPM 2.2 with DDI-1 ====
 
* Single 3" disk, two sides.
* CPM 2.2 only
* Side A is bootable, starts CPM 2.2 but stops at command prompt, and has AMSDOS.COM, ASM.COM, BOOTGEN.COM, CHKDISC.COM, CLOAD.COM, COPYDISC.COM, CSAVE.COM, DDT.COM, DISCCHK.COM, DISCCOPY.COM, DUMP.ASM, DUMP.COM, ED.COM, FILECOPY.COM, LOAD.COM, MOVCPM.COM, PIP.COM, ROINTIME.DEM, SETUP.COM, STAT.COM, SUBMIT.COM, SYSGEN.COM, XSUB.COM
* Side B is bootable, starts CPM 2.2 and automatically starts LOGO and has AMSDOS.COM, LOGO.COM, SETUP.COM
 
Details of files:
* AMSDOS.COM will reset the CPC and return back to BASIC.
* ROINTIME.DEM is a demo of "ROLAND IN TIME" from Amsoft.
* LOGO.COM is Logo v1.1
* the AMSDOS rom contains part of LOGO
 
=== Technical information ===
CP/M 2.2 uses the firmware, the platform specific part of CPM is in the AMSDOS ROM, and this calls through to the firmware through a special "ENTER FIRMWARE" function. By having the BIOS in ROM, using the firmware and having the screen at &c000-&ffff, this gives 41K as the TPA for a CPC 64KB system.
* WBOOT loads multiple sectors from the reserved tracks, this is the platform independent CPM system (BDOS etc).
 
 
=== Memory Map ===
 
CP/M runs with ram selection 0 (i.e. 7FC0) and assumes the upper ROM is selected (in this case AMSDOS). Therefore if you patch and need to change the ROM, then you should store and re-store the upper ROM using the firmware functions. It seems that AMSDOS doesn't use all it's work ram.
 
The alternate register set is setup for the firmware.
 
IY = &ac48?? - is this the base of AMSDOS??
 
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:
 
* &0000-&0002 => WBOOT (JP &AD03)
* &0003 => IOBYTE
* &0004 => user number/drive number
* &0005 => &0007 - BDOS (JP &9F06)
 
TPA is from &100-&96ff (38400 bytes, 37KB TPA). Then:
 
* &9700 - &acff => CPM 2.2 CCP/BDOS
 
* &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.
 
For CPC AMSDOS the BIOS jumpblock has the following addresses in it:
 
boot - C1B2
wboot - C2BE
const - C2E1
conin - C2C3
conout - C2C8
list - C2D2
punch - C2D7
reader - C2DC
home - CDE9
seldsk - c2f2
settrk - c524
setsec - c529
setdma - c51a
read - c2f7
write - c2fc
listst - c2cd
sectran - c55a
"enter firmware" - c0fa
 
 
* &ad33 - &ad42 => used by "enter firmware" for storage of registers etc for transitioning to firmware and restoring back.
 
* &ad43 - &bb00 => used by AMSDOS.
 
* &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
== Download ==
2,541
edits