<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://oldwiki.cpcwiki.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JohnElliott</id>
		<title>CPCWiki - THE Amstrad CPC encyclopedia! - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://oldwiki.cpcwiki.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JohnElliott"/>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php/Special:Contributions/JohnElliott"/>
		<updated>2026-08-29T11:01:54Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=DR_Graph&amp;diff=127233</id>
		<title>DR Graph</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=DR_Graph&amp;diff=127233"/>
				<updated>2026-04-04T14:23:41Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: Added description of GRAPHRSX functions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:DR Graph.jpg|right|thumb|250px|DR Graph]]&lt;br /&gt;
[[File:graph1.png|right|thumb|250px|Demo using the normal PCW driver]]&lt;br /&gt;
&lt;br /&gt;
Program for making business graphics from [[Digital_Research|Digital Research]]. To run the application, place side A in drive A: and side B in drive B:.&lt;br /&gt;
&lt;br /&gt;
== RSX ==&lt;br /&gt;
The Amstrad version has a CP/M 3 RSX attached which modifies the program's behaviour:&lt;br /&gt;
* BDOS function 2Dh is used to stop the program terminating if there is a disk error.&lt;br /&gt;
* Input keycode 0FCh is translated to 1Bh (Escape) and 7Fh (Delete) is translated to 08h (Backspace).&lt;br /&gt;
* The code which loads overlays searches for the overlay on drive M:, and then on A: or B: depending on the number of the overlay.&lt;br /&gt;
* When files are being loaded from disk, BDOS function 2Ch is used to try and read as many records as possible in one go.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{CPCPower|4325}}&lt;br /&gt;
* [http://bitsavers.trailing-edge.com/pdf/digitalResearch/gsx/DR_Graph_Users_Guide_Jun83.pdf User's Guide]&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]] [[Category:Graphic]] [[Category:CP/M]] [[Category:GSX]] [[Category:Manual]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_part_numbers&amp;diff=110673</id>
		<title>Amstrad part numbers</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_part_numbers&amp;diff=110673"/>
				<updated>2023-04-07T16:16:46Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Electronic Component| ]][[Category:Definitions]][[Category:Amstrad Products]][[Category:CPC Internal Components]][[Category:Hardware]][[Category:CPC History]]&lt;br /&gt;
== Custom Chips ==&lt;br /&gt;
 Part    Description&lt;br /&gt;
 40007   Gate-Array version 1 (20RA043) (uses a heat sink, same pinouts as 40008)&lt;br /&gt;
 40008   Gate-Array version 2 (HSG3130) (uses a heat sink, same pinouts as 40007)&lt;br /&gt;
 40009   32K ROM; BIOS and BASIC for CPC464 (English)&lt;br /&gt;
 40010   Gate-Array version 3 (HSG3170) (no heat sink, different pinouts than 40007 and 40008)&lt;br /&gt;
 40015   16K ROM; AMSDOS for CPC664/CPC6128 and DDI-1 disc interface&lt;br /&gt;
 40022   32K ROM; BIOS and BASIC for CPC664 (English)&lt;br /&gt;
 40025   32K ROM; BIOS and BASIC for CPC6128 (English)&lt;br /&gt;
 40026   PCW8xxx printer controller (i8041)&lt;br /&gt;
 40027   PCW8xxx/9xxx keyboard controller (i8048)&lt;br /&gt;
 40028   PCW8xxx/9xxx main ASIC&lt;br /&gt;
 40031   16L8 PAL; Ram management CPC6128&lt;br /&gt;
 40036   CPU and ROM (IC uPD7811G) (for DMP2000 Printer)&lt;br /&gt;
 40037   32K ROM; BIOS and BASIC for CPC464 and Late-CPC472-models (Spanish)&lt;br /&gt;
 40038   32K ROM; BIOS and BASIC for CPC6128 (Spanish)&lt;br /&gt;
 40039   PPC/PC2086 BUS Gate Array&lt;br /&gt;
 40040   PC1512/PPC/PC2086 memory gate array&lt;br /&gt;
 40042   PC1512 keyboard controller (i8048)&lt;br /&gt;
 40043   PC1512 BIOS (even addresses)&lt;br /&gt;
 40044   PC1512 BIOS (odd addresses)&lt;br /&gt;
 40045   PC1512 character ROM&lt;br /&gt;
 40049   PPC Serial &lt;br /&gt;
 40050   32K ROM; BIOS and BASIC for CPC464 (French)&lt;br /&gt;
 40051   32K ROM; BIOS and BASIC for CPC6128 (French)&lt;br /&gt;
 40054   Spectrum +2 ROM English&lt;br /&gt;
 40055   Spectrum +2 ROM Spanish&lt;br /&gt;
 40056   Spectrum +2 ASIC (ULA7K010E5 - main ULA)&lt;br /&gt;
 40057   Spectrum +2 ASIC (ULA1050E - Joystick)&lt;br /&gt;
 40058   Spectrum +2 ASIC&lt;br /&gt;
 40068   Spectrum +2 ROM French&lt;br /&gt;
 40077   Spectrum +2A/+2B/+3 ASIC&lt;br /&gt;
 40078   PC1512 character ROM (with Greek characters)&lt;br /&gt;
 40087   PCW9xxx printer controller ASIC&lt;br /&gt;
 40088   PCW9xxx printer serial receiver?&lt;br /&gt;
 40092   Spectrum +2A/+3 ROM A v4.0 English&lt;br /&gt;
 40093   Spectrum +2A/+3 ROM B v4.0 English&lt;br /&gt;
 40092U  Spectrum +2B ROM A v4.1 English&lt;br /&gt;
 40093U  Spectrum +2B ROM B v4.1 English&lt;br /&gt;
 40094   Spectrum +2A/+3 ROM A v4.0 Spanish&lt;br /&gt;
 40094S  Spectrum +2B ROM A v4.1 Spanish&lt;br /&gt;
 40100   PC1640 EGA ROM  &lt;br /&gt;
 40101   Spectrum +2A/+3 ROM B v4.0 Spanish&lt;br /&gt;
 40101S  Spectrum +2B ROM B v4.1 Spanish&lt;br /&gt;
 40102   PPC ?&lt;br /&gt;
 40103   PCW9xxx printer controller UPD8039 ROM. On my main board this was removed , and a UPD8039 with internal ROM is used instead.&lt;br /&gt;
 40104   PPC512 VDU/LCD Gate Array&lt;br /&gt;
 40106   PPC512 Serial&lt;br /&gt;
 40107   PPC512 BIOS (even addresses)&lt;br /&gt;
 40108   PPC512 BIOS (odd addresses)&lt;br /&gt;
 40109   PPC512 character ROM&lt;br /&gt;
 40112   PPC512 CMOS Controller&lt;br /&gt;
 40135   PPC640 modem ROM&lt;br /&gt;
 40120   PCW9xxx parallel printer controller ASIC&lt;br /&gt;
 40127   PC2086 ???&lt;br /&gt;
 40178   PC2086 keyboard controller (i8049)&lt;br /&gt;
 40179   PC2086 BIOS (even addresses)&lt;br /&gt;
 40180   PC2086 BIOS (odd addresses)&lt;br /&gt;
 40184   PC200 BIOS (even addresses)&lt;br /&gt;
 40185   PC200 BIOS (odd addresses)&lt;br /&gt;
 40186   PC2086 VGA BIOS&lt;br /&gt;
 40198   PPC512 serial ROM?&lt;br /&gt;
 40226   CPC464/CPC6128 &amp;quot;cost-down&amp;quot; ASIC (ARN4) (combines Gate Array, PAL, CRTC, and some small FDC/DRAM/RESET logic)&lt;br /&gt;
 40464   CPC+ Triple 4bit DAC (for RGB video)&lt;br /&gt;
 40489   CPC+ ASIC&lt;br /&gt;
 40908   CPC+ cartridge protection chip (&amp;quot;ACID&amp;quot;)&lt;br /&gt;
 41088-1 CPC+ 27C1001 EPROM in GX 4000 version of [[Burnin' Rubber]] (130Z001)&lt;br /&gt;
 41090-1 CPC+ 27C1001 EPROM in French System Cartridge (CPC+ BIOS/BASIC, AMSDOS v2, Burnin' Rubber) (130Z001)&lt;br /&gt;
 41091-1 CPC+ 27C1001 EPROM in Spanish System Cartridge (CPC+ BIOS/BASIC, AMSDOS v2, Burnin' Rubber) (130Z001)&lt;br /&gt;
 41530   PcW10 main ASIC&lt;br /&gt;
 41857   PenPad 600 ?&lt;br /&gt;
 41863   PenPad 600 ?&lt;br /&gt;
 41864   PenPad 600 ?&lt;br /&gt;
 41898   NC200 ASIC&lt;br /&gt;
 42069   PenPad 600 ROM&lt;br /&gt;
 42112   NC200 System ROM (UK)&lt;br /&gt;
 42778   PcW16 &amp;quot;Anne&amp;quot; ASIC&lt;br /&gt;
&lt;br /&gt;
* PT NO 31600  ASIC for DMP3160 printer (combines TTL logic from earlier DMP's in one SMD chip) (the chip hides on solder side of the PCB)&lt;br /&gt;
* 40092U, 40093U are bug-fixed versions of 40092 and 40093&lt;br /&gt;
* 40094S, 40101S are bug-fixed versions of 40094 and 40101&lt;br /&gt;
&lt;br /&gt;
Part numbers 40092-40094 and 40101 provided and confirmed by Guesser from WOS.&lt;br /&gt;
&lt;br /&gt;
== PCBs ==&lt;br /&gt;
 Part    Description&lt;br /&gt;
 30001   P.C.B. 3&amp;quot; Disc drive&lt;br /&gt;
 30002   P.C.B. 3&amp;quot; Disc drive&lt;br /&gt;
 270100  P.C.B. CPC464 version 1 (one variant) (1983)&lt;br /&gt;
 Z70100  P.C.B. CPC464 version 1 (another variant) (1983)&lt;br /&gt;
 Z70101  P.C.B. CPC464 version 1 keyboard with soldered wires&lt;br /&gt;
 Z70102  P.C.B. CPC464 version 1 keyboard with 20 pin connector (only 19 pins used)&lt;br /&gt;
 Z70102  P.C.B. CPC464 cassette sub-board (This pcb share part number with the keyboard assembly !)&lt;br /&gt;
 Z70200  P.C.B. CPC464 version 2&lt;br /&gt;
 Z70205  P.C.B. CPC664 &lt;br /&gt;
 Z70209  CPC664 Keyboard Assembly (English)&lt;br /&gt;
 Z70210  P.C.B. CPC6128 version 1 (1985)&lt;br /&gt;
 Z70211  CPC464 Keyboard Assembly (English) (ribbon cable connectors)&lt;br /&gt;
 Z70215  P.C.B. CTM644 colour monitor main&lt;br /&gt;
 Z70216  P.C.B. CTM644 colour monitor brightness control&lt;br /&gt;
 Z70217  P.C.B. CTM644 colour monitor cathode ray tube&lt;br /&gt;
 Z70221  CPC6128 Keyboard Assembly (English) (ribbon cable connectors)&lt;br /&gt;
 Z70270  P.C.B. CPC6128 version 1, MC0016x (1985) (centronics variant)&lt;br /&gt;
 Z70290  P.C.B. CPC6128 version 2, MC0020x (1985) (one variant)&lt;br /&gt;
 Z70290  P.C.B. CPC6128 version 2, MC0023x (1985) (german variant)&lt;br /&gt;
 Z70291  P.C.B. PCW8256/8512 (1985)&lt;br /&gt;
 Z70311  CPC6128 Keyboard Assembly (French) (ribbon cable connectors)&lt;br /&gt;
 Z70312  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70313  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70341  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70374  P.C.B. CPC464 version 3 (one variant)&lt;br /&gt;
 Z70375  P.C.B. CPC464 version 3 (another variant)&lt;br /&gt;
 Z70378  P.C.B. CPC464 version 3 (german variant)&lt;br /&gt;
 Z70500  P.C.B. Spectrum+2 issue 3&lt;br /&gt;
 Z70501  Spectrum +2 Datacorder PCB (full part number Z70501/C3-4494(A) )&lt;br /&gt;
 Z70800  P.C.B. PCW9512 (1987)&lt;br /&gt;
 Z70830  Spectrum +2A/+3 Motherboard (ISSUE 1 &amp;amp; 2 both (c) 1987)&lt;br /&gt;
 Z70833  Spectrum +2B Motherboard (ISSUE 1 &amp;amp; 2 (c) 1988, ISSUE 4 (c) 1990)&lt;br /&gt;
 Z70835  Spectrum +3B Motherboard (ISSUE 1 (C)1988 )&lt;br /&gt;
 Z70901  PC2086 motherboard (c) 1988&lt;br /&gt;
 Z80264  P.C.B. 3&amp;quot; disc drive&lt;br /&gt;
 Z80329  P.C.B. CPC464 version 4 (1988)&lt;br /&gt;
 Z80330  P.C.B. CPC6128 version 3 (1988)&lt;br /&gt;
 Z80432  464+ Keyboard Assembly&lt;br /&gt;
&lt;br /&gt;
 Z90903          P.C.B. CPC+ Cartridge (custom LKs) (1990)&lt;br /&gt;
 2700-016P-3     P.C.B. 464+/6128+ Mainboard (1990)&lt;br /&gt;
 2700-017P-4     P.C.B. GX4000 Mainboard (1990)&lt;br /&gt;
 2700-023P-1     P.C.B. CPC+ Cartridge (hardwired LKs) (1990)&lt;br /&gt;
 PCB101/MF0004B  P.C.B. DDI-1 Interface&lt;br /&gt;
 PCB501/MF0003B  P.C.B. FD-1 Power Supply (AC)&lt;br /&gt;
 PCB502/MF0001A  P.C.B. FD-1 Power Supply (DC)&lt;br /&gt;
 PCB504/MF0002A  P.C.B. FD-1 Relay Board&lt;br /&gt;
 MS0043A         P.C.B. CPC472 Daughterboard&lt;br /&gt;
 112C4001-3160   P.C.B. DMP3160 Printer, VER. 04 (C) 1988 (0AMS0100 PSP0151B)&lt;br /&gt;
 C3-4522/GEM-194HB       Spectrum +2A/+2B Datacorder PCB&lt;br /&gt;
&lt;br /&gt;
Note that some numbers start with '''27''' instead of '''Z7''' (the boards are really labeled like so, this is not a typo).&lt;br /&gt;
&lt;br /&gt;
Information about Spectrum PCBs provided by Guesser of WOS.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Amsoft SOFT Numbers]]&lt;br /&gt;
* [[Mainboard Versions]]&lt;br /&gt;
&lt;br /&gt;
Contributors: Gérald Vincent&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=CP/M_3.0&amp;diff=103850</id>
		<title>CP/M 3.0</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=CP/M_3.0&amp;diff=103850"/>
				<updated>2019-12-09T23:24:21Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: /* PALETTE.COM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:cpm30boot.jpg|thumb|300px|CP/M 3.0 after boot]]&lt;br /&gt;
&lt;br /&gt;
CPM 3.0 (also known as CPM+) was available on the 2nd [[System_Disk]] Disc for CPC6128 but there were other implementations available.&lt;br /&gt;
&lt;br /&gt;
== Dobbertin's implementation of CP/M+ ==&lt;br /&gt;
&lt;br /&gt;
* [[Dobbertin CPM+]]&lt;br /&gt;
&lt;br /&gt;
== Graduate Software's implementation of CP/M+ on ROM ==&lt;br /&gt;
&lt;br /&gt;
* [[Graduate Software]]&lt;br /&gt;
&lt;br /&gt;
== Amstrad's implementation of CP/M+ ==&lt;br /&gt;
&lt;br /&gt;
Amstrad distributed CP/M+ on the side 4 of the system discs that came with the CPC6128. It requires a Dk'Tronics compatible ram expansion. It provided 61K TPA. To get 61K TPA, CPM+ uses 'C1' and 'C2' RAM configuration with TPA in the 2nd bank and the CCP, BDOS, BIOS, screen and firmware in the 1st 64KB of RAM. This arrangement allows 61KB useable for programs.&lt;br /&gt;
&lt;br /&gt;
On side 1 of the system discs was CP/M 2.2.&lt;br /&gt;
&lt;br /&gt;
* Amstrad CP/M+ uses Amstrad's &amp;quot;System&amp;quot; format. This is 40 tracks, 1 side, 9 sectors per track numbered &amp;amp;41-&amp;amp;49. Each sector is 512bytes. There are two reserved tracks, then the directory which has 64 entries (which occupies 4 sectors) and then the data area. &lt;br /&gt;
* CP/M is booted using an RSX command &amp;quot;|CPM&amp;quot; which is implemented in the Amstrad disc rom (AMSDOS).&lt;br /&gt;
* |CPM loads track 0, side 0, sector &amp;amp;41 into RAM at &amp;amp;100-&amp;amp;2ff. This is the boot sector and contains the boot program.&lt;br /&gt;
* The boot program then loads the directory from track 2, sector &amp;amp;41.&lt;br /&gt;
* The boot program locates a program with extension &amp;quot;EMS&amp;quot;.&lt;br /&gt;
* This program is loaded into RAM at &amp;amp;c00.&lt;br /&gt;
* This is then executed. (EMS contains the BIOS, BDOS and relocates and re-configures the memory. CP/M doesn't use the CP/M 2.2 BIOS from the Amstrad disc ROM.)&lt;br /&gt;
&lt;br /&gt;
=== Creating a minimal boot disc ===&lt;br /&gt;
&lt;br /&gt;
Using CPM2.2:&lt;br /&gt;
* Use disckit2 to format a vendor format disc&lt;br /&gt;
* Use BOOTGEN to put the CPM+ boot sector onto your disc. (Source is CPM+, Destination is your disk).&lt;br /&gt;
* Use FILECOPY to put C10CPM3.EMS onto your disc (FILECOPY C10CPM3.EMS. Source is CPM+, Destination is your disk).&lt;br /&gt;
* Your minimal CP/M+ disc is bootable.&lt;br /&gt;
&lt;br /&gt;
Using CPM3.3:&lt;br /&gt;
* Use disckit3 to format and install the boot sector onto the disc.&lt;br /&gt;
* Use PIP to copy C10CPM3.EMS to your disc (B:=A:C10CPM3.EMS)&lt;br /&gt;
* Your minimal CP/M+ disc is bootable.&lt;br /&gt;
&lt;br /&gt;
=== Terminal font ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;CP/M 3.0 terminal font&amp;quot;&amp;gt;&lt;br /&gt;
Image:Cpmplus.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Console Input ===&lt;br /&gt;
&lt;br /&gt;
Console input (via BDOS functions) uses firmware functions and returns firmware key codes when a key is pressed. i.e. &amp;amp;f0 is cursor up.&lt;br /&gt;
&lt;br /&gt;
=== Console Output/Terminal emulation ===&lt;br /&gt;
&lt;br /&gt;
Console output is processed via the terminal emulation. Console output doesn't execute firmware control codes.&lt;br /&gt;
&lt;br /&gt;
A simplified VT52 terminal is emulated. Home means the top-left position.&lt;br /&gt;
&lt;br /&gt;
The following are supported:&lt;br /&gt;
&lt;br /&gt;
 ESC 0 - disable status line&lt;br /&gt;
 ESC 1 - enable status line&lt;br /&gt;
 ESC 2 - set language&lt;br /&gt;
 ESC 3 - set screen mode?&lt;br /&gt;
 ESC A - cursor up&lt;br /&gt;
 ESC B - cursor down&lt;br /&gt;
 ESC C - cursor left&lt;br /&gt;
 ESC D - cursor right&lt;br /&gt;
 ESC E - clear screen and move cursor to home&lt;br /&gt;
 ESC H - move cursor to home&lt;br /&gt;
 ESC I - reverse line feed&lt;br /&gt;
 ESC J - erase to end of screen&lt;br /&gt;
 ESC K - erase to end of line&lt;br /&gt;
 ESC L - insert line&lt;br /&gt;
 ESC M - delete current&lt;br /&gt;
 ESC N - delete character and move characters up&lt;br /&gt;
 ESC Y - set cursor position&lt;br /&gt;
 ESC d - erase all above&lt;br /&gt;
 ESC b - set foreground&lt;br /&gt;
 ESC c - set background (and border)&lt;br /&gt;
 ESC e - enable cursor&lt;br /&gt;
 ESC f - disable cursor&lt;br /&gt;
 ESC j - save cursor pos&lt;br /&gt;
 ESC k - restore cursor pos&lt;br /&gt;
 ESC l - erase and above cursor&lt;br /&gt;
 ESC o - erase current line&lt;br /&gt;
 ESC p - invert on&lt;br /&gt;
 ESC q - invert off&lt;br /&gt;
 ESC r - select bright (recognised but not implemented)&lt;br /&gt;
 ESC u - cancel bright (recognised but not implemented)&lt;br /&gt;
 ESC v - wrap on&lt;br /&gt;
 ESC w - wrap off&lt;br /&gt;
 ESC x - mono mode&lt;br /&gt;
 ESC y - mono c080 mode&lt;br /&gt;
&lt;br /&gt;
PCW and Spectrum support viewports. This is not supported on CPC. CPC assumes a single viewport covering the entire screen and it is moved up/down using software when using insert line or delete current, but moved up using hardware otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Memory layout ===&lt;br /&gt;
&lt;br /&gt;
* 1st 64KB has Amstrad's XBIOS (callable using 'userf'), CCP, BDOS, BIOS, screen and firmware. Screen is at &amp;amp;4000-&amp;amp;7fff. Firmware is used. AMSDOS is not used.&lt;br /&gt;
* &amp;amp;c1/&amp;amp;c2 are used, so that there is common code at &amp;amp;c000-&amp;amp;ffff. This common code has a small BDOS and BIOS. Most of the functions use trampoline code to transition to bank 0 and call into the XBIOS.&lt;br /&gt;
* 2nd 64KB has the TPA and the shared code.&lt;br /&gt;
a) Page C4 has WBOOT and BDOS jump + &amp;amp;100-&amp;amp;3f00 of the TPA. This calls to functions in Page c7.&lt;br /&gt;
b) Page C5 has &amp;amp;4000-&amp;amp;7fff of the TPA.&lt;br /&gt;
c) Page C6 has &amp;amp;8000-&amp;amp;bfff of the TPA.&lt;br /&gt;
d) Page C7 has &amp;amp;c000-&amp;amp;f2fb of the TPA. From &amp;amp;f2fc to &amp;amp;ffff is the trampoline code which transitions * to 1st bank of 64KB.&lt;br /&gt;
&lt;br /&gt;
=== Extra memory ===&lt;br /&gt;
&lt;br /&gt;
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').&lt;br /&gt;
&lt;br /&gt;
Therefore access to the additional RAM follows a pattern such as this:&lt;br /&gt;
* 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'.&lt;br /&gt;
* 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.&lt;br /&gt;
* Remember the current memory configuration (e.g. C1,C3,C0) &lt;br /&gt;
* 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.&lt;br /&gt;
* Then you need to restore the memory configuration (e.g. C1,C3,C0) and trampoline back to the TPA.&lt;br /&gt;
&lt;br /&gt;
Therefore extra memory access on the CPC is not as fast as it could be compared to running under AMSDOS.&lt;br /&gt;
&lt;br /&gt;
=== Implementing a storage device driver ===&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;drvtable&amp;quot; gets the list of DPH addresses for each drive. This is actually fixed at FE2F and is referenced by the XBIOS.&lt;br /&gt;
&lt;br /&gt;
Amstrad implemented the extended DPH in the Digital Research sample BIOS. The ten bytes before a DPH give the addresses of read/write functions:&lt;br /&gt;
&lt;br /&gt;
* -10,-9 - address of sector write function&lt;br /&gt;
* -8,-7 - address of sector read function&lt;br /&gt;
* -6,-5 - address of drive select function&lt;br /&gt;
* -4,-3 - address of drive init function (never called)&lt;br /&gt;
* -2 - physical drive number (for B: this is 0 on a single-drive system and 1 on a two-drive system)&lt;br /&gt;
* -1 - drive type&lt;br /&gt;
&lt;br /&gt;
The XBIOS calls these and assumes bank 0 is active. If you write a driver in TPA space you will need to transition to and from bank 1 using selbnk etc.&lt;br /&gt;
&lt;br /&gt;
The parameters for the read / write functions are at 0BEF0h:&lt;br /&gt;
 	DB	@adrv	;Selected logical drive&lt;br /&gt;
  	DB	@rdrv	;Selected physical drive (from the byte at DPH-2)&lt;br /&gt;
 	DW	@trk	;Track passed to SETTRK.&lt;br /&gt;
 	DW	@sect	;Sector passed to SETSEC.&lt;br /&gt;
 	DW	@dma	;DMA address passed to SETDMA.&lt;br /&gt;
 	DB	@cnt	;Multiple I/O count passed to MULTIO&lt;br /&gt;
 	DB	@dbnk	;DMA bank passed to SETBNK&lt;br /&gt;
&lt;br /&gt;
=== PALETTE.COM ===&lt;br /&gt;
&lt;br /&gt;
PALETTE is a COM program written by Locomotive Software and allows the colours to be changed.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&lt;br /&gt;
 PALETTE &amp;lt;background&amp;gt; &amp;lt;foreground&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;background&amp;gt; and &amp;lt;foreground&amp;gt; are r,g,b colour codes with 2 bits for each colour defined in binary as r1 r0 g1 g0 b1 b0. Therefore black is 000000, bright white is 111111, white (grey) is 010101 and bright red is 110000.&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* [https://www.seasip.info/Cpm/index.html John Elliott's information about CPM 2.2 and CPM+ on the Amstrad]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CP/M]][[Category:Operating System]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=CP/M_3.0&amp;diff=103849</id>
		<title>CP/M 3.0</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=CP/M_3.0&amp;diff=103849"/>
				<updated>2019-12-09T23:24:02Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: /* PALETTE.COM */ It always sets inks 0 and 1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:cpm30boot.jpg|thumb|300px|CP/M 3.0 after boot]]&lt;br /&gt;
&lt;br /&gt;
CPM 3.0 (also known as CPM+) was available on the 2nd [[System_Disk]] Disc for CPC6128 but there were other implementations available.&lt;br /&gt;
&lt;br /&gt;
== Dobbertin's implementation of CP/M+ ==&lt;br /&gt;
&lt;br /&gt;
* [[Dobbertin CPM+]]&lt;br /&gt;
&lt;br /&gt;
== Graduate Software's implementation of CP/M+ on ROM ==&lt;br /&gt;
&lt;br /&gt;
* [[Graduate Software]]&lt;br /&gt;
&lt;br /&gt;
== Amstrad's implementation of CP/M+ ==&lt;br /&gt;
&lt;br /&gt;
Amstrad distributed CP/M+ on the side 4 of the system discs that came with the CPC6128. It requires a Dk'Tronics compatible ram expansion. It provided 61K TPA. To get 61K TPA, CPM+ uses 'C1' and 'C2' RAM configuration with TPA in the 2nd bank and the CCP, BDOS, BIOS, screen and firmware in the 1st 64KB of RAM. This arrangement allows 61KB useable for programs.&lt;br /&gt;
&lt;br /&gt;
On side 1 of the system discs was CP/M 2.2.&lt;br /&gt;
&lt;br /&gt;
* Amstrad CP/M+ uses Amstrad's &amp;quot;System&amp;quot; format. This is 40 tracks, 1 side, 9 sectors per track numbered &amp;amp;41-&amp;amp;49. Each sector is 512bytes. There are two reserved tracks, then the directory which has 64 entries (which occupies 4 sectors) and then the data area. &lt;br /&gt;
* CP/M is booted using an RSX command &amp;quot;|CPM&amp;quot; which is implemented in the Amstrad disc rom (AMSDOS).&lt;br /&gt;
* |CPM loads track 0, side 0, sector &amp;amp;41 into RAM at &amp;amp;100-&amp;amp;2ff. This is the boot sector and contains the boot program.&lt;br /&gt;
* The boot program then loads the directory from track 2, sector &amp;amp;41.&lt;br /&gt;
* The boot program locates a program with extension &amp;quot;EMS&amp;quot;.&lt;br /&gt;
* This program is loaded into RAM at &amp;amp;c00.&lt;br /&gt;
* This is then executed. (EMS contains the BIOS, BDOS and relocates and re-configures the memory. CP/M doesn't use the CP/M 2.2 BIOS from the Amstrad disc ROM.)&lt;br /&gt;
&lt;br /&gt;
=== Creating a minimal boot disc ===&lt;br /&gt;
&lt;br /&gt;
Using CPM2.2:&lt;br /&gt;
* Use disckit2 to format a vendor format disc&lt;br /&gt;
* Use BOOTGEN to put the CPM+ boot sector onto your disc. (Source is CPM+, Destination is your disk).&lt;br /&gt;
* Use FILECOPY to put C10CPM3.EMS onto your disc (FILECOPY C10CPM3.EMS. Source is CPM+, Destination is your disk).&lt;br /&gt;
* Your minimal CP/M+ disc is bootable.&lt;br /&gt;
&lt;br /&gt;
Using CPM3.3:&lt;br /&gt;
* Use disckit3 to format and install the boot sector onto the disc.&lt;br /&gt;
* Use PIP to copy C10CPM3.EMS to your disc (B:=A:C10CPM3.EMS)&lt;br /&gt;
* Your minimal CP/M+ disc is bootable.&lt;br /&gt;
&lt;br /&gt;
=== Terminal font ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;CP/M 3.0 terminal font&amp;quot;&amp;gt;&lt;br /&gt;
Image:Cpmplus.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Console Input ===&lt;br /&gt;
&lt;br /&gt;
Console input (via BDOS functions) uses firmware functions and returns firmware key codes when a key is pressed. i.e. &amp;amp;f0 is cursor up.&lt;br /&gt;
&lt;br /&gt;
=== Console Output/Terminal emulation ===&lt;br /&gt;
&lt;br /&gt;
Console output is processed via the terminal emulation. Console output doesn't execute firmware control codes.&lt;br /&gt;
&lt;br /&gt;
A simplified VT52 terminal is emulated. Home means the top-left position.&lt;br /&gt;
&lt;br /&gt;
The following are supported:&lt;br /&gt;
&lt;br /&gt;
 ESC 0 - disable status line&lt;br /&gt;
 ESC 1 - enable status line&lt;br /&gt;
 ESC 2 - set language&lt;br /&gt;
 ESC 3 - set screen mode?&lt;br /&gt;
 ESC A - cursor up&lt;br /&gt;
 ESC B - cursor down&lt;br /&gt;
 ESC C - cursor left&lt;br /&gt;
 ESC D - cursor right&lt;br /&gt;
 ESC E - clear screen and move cursor to home&lt;br /&gt;
 ESC H - move cursor to home&lt;br /&gt;
 ESC I - reverse line feed&lt;br /&gt;
 ESC J - erase to end of screen&lt;br /&gt;
 ESC K - erase to end of line&lt;br /&gt;
 ESC L - insert line&lt;br /&gt;
 ESC M - delete current&lt;br /&gt;
 ESC N - delete character and move characters up&lt;br /&gt;
 ESC Y - set cursor position&lt;br /&gt;
 ESC d - erase all above&lt;br /&gt;
 ESC b - set foreground&lt;br /&gt;
 ESC c - set background (and border)&lt;br /&gt;
 ESC e - enable cursor&lt;br /&gt;
 ESC f - disable cursor&lt;br /&gt;
 ESC j - save cursor pos&lt;br /&gt;
 ESC k - restore cursor pos&lt;br /&gt;
 ESC l - erase and above cursor&lt;br /&gt;
 ESC o - erase current line&lt;br /&gt;
 ESC p - invert on&lt;br /&gt;
 ESC q - invert off&lt;br /&gt;
 ESC r - select bright (recognised but not implemented)&lt;br /&gt;
 ESC u - cancel bright (recognised but not implemented)&lt;br /&gt;
 ESC v - wrap on&lt;br /&gt;
 ESC w - wrap off&lt;br /&gt;
 ESC x - mono mode&lt;br /&gt;
 ESC y - mono c080 mode&lt;br /&gt;
&lt;br /&gt;
PCW and Spectrum support viewports. This is not supported on CPC. CPC assumes a single viewport covering the entire screen and it is moved up/down using software when using insert line or delete current, but moved up using hardware otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Memory layout ===&lt;br /&gt;
&lt;br /&gt;
* 1st 64KB has Amstrad's XBIOS (callable using 'userf'), CCP, BDOS, BIOS, screen and firmware. Screen is at &amp;amp;4000-&amp;amp;7fff. Firmware is used. AMSDOS is not used.&lt;br /&gt;
* &amp;amp;c1/&amp;amp;c2 are used, so that there is common code at &amp;amp;c000-&amp;amp;ffff. This common code has a small BDOS and BIOS. Most of the functions use trampoline code to transition to bank 0 and call into the XBIOS.&lt;br /&gt;
* 2nd 64KB has the TPA and the shared code.&lt;br /&gt;
a) Page C4 has WBOOT and BDOS jump + &amp;amp;100-&amp;amp;3f00 of the TPA. This calls to functions in Page c7.&lt;br /&gt;
b) Page C5 has &amp;amp;4000-&amp;amp;7fff of the TPA.&lt;br /&gt;
c) Page C6 has &amp;amp;8000-&amp;amp;bfff of the TPA.&lt;br /&gt;
d) Page C7 has &amp;amp;c000-&amp;amp;f2fb of the TPA. From &amp;amp;f2fc to &amp;amp;ffff is the trampoline code which transitions * to 1st bank of 64KB.&lt;br /&gt;
&lt;br /&gt;
=== Extra memory ===&lt;br /&gt;
&lt;br /&gt;
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').&lt;br /&gt;
&lt;br /&gt;
Therefore access to the additional RAM follows a pattern such as this:&lt;br /&gt;
* 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'.&lt;br /&gt;
* 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.&lt;br /&gt;
* Remember the current memory configuration (e.g. C1,C3,C0) &lt;br /&gt;
* 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.&lt;br /&gt;
* Then you need to restore the memory configuration (e.g. C1,C3,C0) and trampoline back to the TPA.&lt;br /&gt;
&lt;br /&gt;
Therefore extra memory access on the CPC is not as fast as it could be compared to running under AMSDOS.&lt;br /&gt;
&lt;br /&gt;
=== Implementing a storage device driver ===&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;drvtable&amp;quot; gets the list of DPH addresses for each drive. This is actually fixed at FE2F and is referenced by the XBIOS.&lt;br /&gt;
&lt;br /&gt;
Amstrad implemented the extended DPH in the Digital Research sample BIOS. The ten bytes before a DPH give the addresses of read/write functions:&lt;br /&gt;
&lt;br /&gt;
* -10,-9 - address of sector write function&lt;br /&gt;
* -8,-7 - address of sector read function&lt;br /&gt;
* -6,-5 - address of drive select function&lt;br /&gt;
* -4,-3 - address of drive init function (never called)&lt;br /&gt;
* -2 - physical drive number (for B: this is 0 on a single-drive system and 1 on a two-drive system)&lt;br /&gt;
* -1 - drive type&lt;br /&gt;
&lt;br /&gt;
The XBIOS calls these and assumes bank 0 is active. If you write a driver in TPA space you will need to transition to and from bank 1 using selbnk etc.&lt;br /&gt;
&lt;br /&gt;
The parameters for the read / write functions are at 0BEF0h:&lt;br /&gt;
 	DB	@adrv	;Selected logical drive&lt;br /&gt;
  	DB	@rdrv	;Selected physical drive (from the byte at DPH-2)&lt;br /&gt;
 	DW	@trk	;Track passed to SETTRK.&lt;br /&gt;
 	DW	@sect	;Sector passed to SETSEC.&lt;br /&gt;
 	DW	@dma	;DMA address passed to SETDMA.&lt;br /&gt;
 	DB	@cnt	;Multiple I/O count passed to MULTIO&lt;br /&gt;
 	DB	@dbnk	;DMA bank passed to SETBNK&lt;br /&gt;
&lt;br /&gt;
=== PALETTE.COM ===&lt;br /&gt;
&lt;br /&gt;
PALETTE is a COM program written by Locomotive Software and allows the colours to be changed.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&lt;br /&gt;
PALETTE &amp;lt;background&amp;gt; &amp;lt;foreground&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;background&amp;gt; and &amp;lt;foreground&amp;gt; are r,g,b colour codes with 2 bits for each colour defined in binary as r1 r0 g1 g0 b1 b0. Therefore black is 000000, bright white is 111111, white (grey) is 010101 and bright red is 110000.&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* [https://www.seasip.info/Cpm/index.html John Elliott's information about CPM 2.2 and CPM+ on the Amstrad]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CP/M]][[Category:Operating System]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=CP/M_3.0&amp;diff=103848</id>
		<title>CP/M 3.0</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=CP/M_3.0&amp;diff=103848"/>
				<updated>2019-12-09T12:33:45Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:cpm30boot.jpg|thumb|300px|CP/M 3.0 after boot]]&lt;br /&gt;
&lt;br /&gt;
CPM 3.0 (also known as CPM+) was available on the 2nd [[System_Disk]] Disc for CPC6128 but there were other implementations available.&lt;br /&gt;
&lt;br /&gt;
== Dobbertin's implementation of CP/M+ ==&lt;br /&gt;
&lt;br /&gt;
* [[Dobbertin CPM+]]&lt;br /&gt;
&lt;br /&gt;
== Graduate Software's implementation of CP/M+ on ROM ==&lt;br /&gt;
&lt;br /&gt;
* [[Graduate Software]]&lt;br /&gt;
&lt;br /&gt;
== Amstrad's implementation of CP/M+ ==&lt;br /&gt;
&lt;br /&gt;
Amstrad distributed CP/M+ on the side 4 of the system discs that came with the CPC6128. It requires a Dk'Tronics compatible ram expansion. It provided 61K TPA. To get 61K TPA, CPM+ uses 'C1' and 'C2' RAM configuration with TPA in the 2nd bank and the CCP, BDOS, BIOS, screen and firmware in the 1st 64KB of RAM. This arrangement allows 61KB useable for programs.&lt;br /&gt;
&lt;br /&gt;
On side 1 of the system discs was CP/M 2.2.&lt;br /&gt;
&lt;br /&gt;
* Amstrad CP/M+ uses Amstrad's &amp;quot;System&amp;quot; format. This is 40 tracks, 1 side, 9 sectors per track numbered &amp;amp;41-&amp;amp;49. Each sector is 512bytes. There are two reserved tracks, then the directory which has 64 entries (which occupies 4 sectors) and then the data area. &lt;br /&gt;
* CP/M is booted using an RSX command &amp;quot;|CPM&amp;quot; which is implemented in the Amstrad disc rom (AMSDOS).&lt;br /&gt;
* |CPM loads track 0, side 0, sector &amp;amp;41 into RAM at &amp;amp;100-&amp;amp;2ff. This is the boot sector and contains the boot program.&lt;br /&gt;
* The boot program then loads the directory from track 2, sector &amp;amp;41.&lt;br /&gt;
* The boot program locates a program with extension &amp;quot;EMS&amp;quot;.&lt;br /&gt;
* This program is loaded into RAM at &amp;amp;c00.&lt;br /&gt;
* This is then executed. (EMS contains the BIOS, BDOS and relocates and re-configures the memory. CP/M doesn't use the CP/M 2.2 BIOS from the Amstrad disc ROM.)&lt;br /&gt;
&lt;br /&gt;
=== Creating a minimal boot disc ===&lt;br /&gt;
&lt;br /&gt;
Using CPM2.2:&lt;br /&gt;
* Use disckit2 to format a vendor format disc&lt;br /&gt;
* Use BOOTGEN to put the CPM+ boot sector onto your disc. (Source is CPM+, Destination is your disk).&lt;br /&gt;
* Use FILECOPY to put C10CPM3.EMS onto your disc (FILECOPY C10CPM3.EMS. Source is CPM+, Destination is your disk).&lt;br /&gt;
* Your minimal CP/M+ disc is bootable.&lt;br /&gt;
&lt;br /&gt;
Using CPM3.3:&lt;br /&gt;
* Use disckit3 to format and install the boot sector onto the disc.&lt;br /&gt;
* Use PIP to copy C10CPM3.EMS to your disc (B:=A:C10CPM3.EMS)&lt;br /&gt;
* Your minimal CP/M+ disc is bootable.&lt;br /&gt;
&lt;br /&gt;
=== Terminal font ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;CP/M 3.0 terminal font&amp;quot;&amp;gt;&lt;br /&gt;
Image:Cpmplus.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Console Input ===&lt;br /&gt;
&lt;br /&gt;
Console input (via BDOS functions) uses firmware functions and returns firmware key codes when a key is pressed. i.e. &amp;amp;f0 is cursor up.&lt;br /&gt;
&lt;br /&gt;
=== Console Output/Terminal emulation ===&lt;br /&gt;
&lt;br /&gt;
Console output is processed via the terminal emulation. Console output doesn't execute firmware control codes.&lt;br /&gt;
&lt;br /&gt;
A simplified VT52 terminal is emulated. Home means the top-left position.&lt;br /&gt;
&lt;br /&gt;
The following are supported:&lt;br /&gt;
&lt;br /&gt;
 ESC 0 - disable status line&lt;br /&gt;
 ESC 1 - enable status line&lt;br /&gt;
 ESC 2 - set language&lt;br /&gt;
 ESC 3 - set screen mode?&lt;br /&gt;
 ESC A - cursor up&lt;br /&gt;
 ESC B - cursor down&lt;br /&gt;
 ESC C - cursor left&lt;br /&gt;
 ESC D - cursor right&lt;br /&gt;
 ESC E - clear screen and move cursor to home&lt;br /&gt;
 ESC H - move cursor to home&lt;br /&gt;
 ESC I - reverse line feed&lt;br /&gt;
 ESC J - erase to end of screen&lt;br /&gt;
 ESC K - erase to end of line&lt;br /&gt;
 ESC L - insert line&lt;br /&gt;
 ESC M - delete current&lt;br /&gt;
 ESC N - delete character and move characters up&lt;br /&gt;
 ESC Y - set cursor position&lt;br /&gt;
 ESC d - erase all above&lt;br /&gt;
 ESC b - set foreground&lt;br /&gt;
 ESC c - set background (and border)&lt;br /&gt;
 ESC e - enable cursor&lt;br /&gt;
 ESC f - disable cursor&lt;br /&gt;
 ESC j - save cursor pos&lt;br /&gt;
 ESC k - restore cursor pos&lt;br /&gt;
 ESC l - erase and above cursor&lt;br /&gt;
 ESC o - erase current line&lt;br /&gt;
 ESC p - invert on&lt;br /&gt;
 ESC q - invert off&lt;br /&gt;
 ESC r - select bright (recognised but not implemented)&lt;br /&gt;
 ESC u - cancel bright (recognised but not implemented)&lt;br /&gt;
 ESC v - wrap on&lt;br /&gt;
 ESC w - wrap off&lt;br /&gt;
 ESC x - mono mode&lt;br /&gt;
 ESC y - mono c080 mode&lt;br /&gt;
&lt;br /&gt;
PCW and Spectrum support viewports. This is not supported on CPC. CPC assumes a single viewport covering the entire screen and it is moved up/down using software when using insert line or delete current, but moved up using hardware otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Memory layout ===&lt;br /&gt;
&lt;br /&gt;
* 1st 64KB has Amstrad's XBIOS (callable using 'userf'), CCP, BDOS, BIOS, screen and firmware. Screen is at &amp;amp;4000-&amp;amp;7fff. Firmware is used. AMSDOS is not used.&lt;br /&gt;
* &amp;amp;c1/&amp;amp;c2 are used, so that there is common code at &amp;amp;c000-&amp;amp;ffff. This common code has a small BDOS and BIOS. Most of the functions use trampoline code to transition to bank 0 and call into the XBIOS.&lt;br /&gt;
* 2nd 64KB has the TPA and the shared code.&lt;br /&gt;
a) Page C4 has WBOOT and BDOS jump + &amp;amp;100-&amp;amp;3f00 of the TPA. This calls to functions in Page c7.&lt;br /&gt;
b) Page C5 has &amp;amp;4000-&amp;amp;7fff of the TPA.&lt;br /&gt;
c) Page C6 has &amp;amp;8000-&amp;amp;bfff of the TPA.&lt;br /&gt;
d) Page C7 has &amp;amp;c000-&amp;amp;f2fb of the TPA. From &amp;amp;f2fc to &amp;amp;ffff is the trampoline code which transitions * to 1st bank of 64KB.&lt;br /&gt;
&lt;br /&gt;
=== Extra memory ===&lt;br /&gt;
&lt;br /&gt;
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').&lt;br /&gt;
&lt;br /&gt;
Therefore access to the additional RAM follows a pattern such as this:&lt;br /&gt;
* 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'.&lt;br /&gt;
* 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.&lt;br /&gt;
* Remember the current memory configuration (e.g. C1,C3,C0) &lt;br /&gt;
* 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.&lt;br /&gt;
* Then you need to restore the memory configuration (e.g. C1,C3,C0) and trampoline back to the TPA.&lt;br /&gt;
&lt;br /&gt;
Therefore extra memory access on the CPC is not as fast as it could be compared to running under AMSDOS.&lt;br /&gt;
&lt;br /&gt;
=== Implementing a storage device driver ===&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;drvtable&amp;quot; gets the list of DPH addresses for each drive. This is actually fixed at FE2F and is referenced by the XBIOS.&lt;br /&gt;
&lt;br /&gt;
Amstrad implemented the extended DPH in the Digital Research sample BIOS. The ten bytes before a DPH give the addresses of read/write functions:&lt;br /&gt;
&lt;br /&gt;
* -10,-9 - address of sector write function&lt;br /&gt;
* -8,-7 - address of sector read function&lt;br /&gt;
* -6,-5 - address of drive select function&lt;br /&gt;
* -4,-3 - address of drive init function (never called)&lt;br /&gt;
* -2 - physical drive number (for B: this is 0 on a single-drive system and 1 on a two-drive system)&lt;br /&gt;
* -1 - drive type&lt;br /&gt;
&lt;br /&gt;
The XBIOS calls these and assumes bank 0 is active. If you write a driver in TPA space you will need to transition to and from bank 1 using selbnk etc.&lt;br /&gt;
&lt;br /&gt;
The parameters for the read / write functions are at 0BEF0h:&lt;br /&gt;
 	DB	@adrv	;Selected logical drive&lt;br /&gt;
  	DB	@rdrv	;Selected physical drive (from the byte at DPH-2)&lt;br /&gt;
 	DW	@trk	;Track passed to SETTRK.&lt;br /&gt;
 	DW	@sect	;Sector passed to SETSEC.&lt;br /&gt;
 	DW	@dma	;DMA address passed to SETDMA.&lt;br /&gt;
 	DB	@cnt	;Multiple I/O count passed to MULTIO&lt;br /&gt;
 	DB	@dbnk	;DMA bank passed to SETBNK&lt;br /&gt;
&lt;br /&gt;
=== PALETTE.COM ===&lt;br /&gt;
&lt;br /&gt;
PALETTE is a COM program written by Locomotive Software and allows the colours to be changed.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&lt;br /&gt;
PALETTE &amp;lt;palette index&amp;gt; &amp;lt;colour code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;palette index&amp;gt; is in the range 0-15 inclusive and defines the pen to change.&lt;br /&gt;
&amp;lt;colour code&amp;gt; is a r,g,b colour code with 2 bits for each colour defined in binary as r1 r0 g1 g0 b1 b0. Therefore black is 000000, bright white is 111111, white (grey) is 010101 and bright red is 110000.&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* [https://www.seasip.info/Cpm/index.html John Elliott's information about CPM 2.2 and CPM+ on the Amstrad]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CP/M]][[Category:Operating System]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=CP/M_3.0&amp;diff=103847</id>
		<title>CP/M 3.0</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=CP/M_3.0&amp;diff=103847"/>
				<updated>2019-12-09T12:33:06Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: More detail on implementing block devices&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:cpm30boot.jpg|thumb|300px|CP/M 3.0 after boot]]&lt;br /&gt;
&lt;br /&gt;
CPM 3.0 (also known as CPM+) was available on the 2nd [[System_Disk]] Disc for CPC6128 but there were other implementations available.&lt;br /&gt;
&lt;br /&gt;
== Dobbertin's implementation of CP/M+ ==&lt;br /&gt;
&lt;br /&gt;
* [[Dobbertin CPM+]]&lt;br /&gt;
&lt;br /&gt;
== Graduate Software's implementation of CP/M+ on ROM ==&lt;br /&gt;
&lt;br /&gt;
* [[Graduate Software]]&lt;br /&gt;
&lt;br /&gt;
== Amstrad's implementation of CP/M+ ==&lt;br /&gt;
&lt;br /&gt;
Amstrad distributed CP/M+ on the side 4 of the system discs that came with the CPC6128. It requires a Dk'Tronics compatible ram expansion. It provided 61K TPA. To get 61K TPA, CPM+ uses 'C1' and 'C2' RAM configuration with TPA in the 2nd bank and the CCP, BDOS, BIOS, screen and firmware in the 1st 64KB of RAM. This arrangement allows 61KB useable for programs.&lt;br /&gt;
&lt;br /&gt;
On side 1 of the system discs was CP/M 2.2.&lt;br /&gt;
&lt;br /&gt;
* Amstrad CP/M+ uses Amstrad's &amp;quot;System&amp;quot; format. This is 40 tracks, 1 side, 9 sectors per track numbered &amp;amp;41-&amp;amp;49. Each sector is 512bytes. There are two reserved tracks, then the directory which has 64 entries (which occupies 4 sectors) and then the data area. &lt;br /&gt;
* CP/M is booted using an RSX command &amp;quot;|CPM&amp;quot; which is implemented in the Amstrad disc rom (AMSDOS).&lt;br /&gt;
* |CPM loads track 0, side 0, sector &amp;amp;41 into RAM at &amp;amp;100-&amp;amp;2ff. This is the boot sector and contains the boot program.&lt;br /&gt;
* The boot program then loads the directory from track 2, sector &amp;amp;41.&lt;br /&gt;
* The boot program locates a program with extension &amp;quot;EMS&amp;quot;.&lt;br /&gt;
* This program is loaded into RAM at &amp;amp;c00.&lt;br /&gt;
* This is then executed. (EMS contains the BIOS, BDOS and relocates and re-configures the memory. CP/M doesn't use the CP/M 2.2 BIOS from the Amstrad disc ROM.)&lt;br /&gt;
&lt;br /&gt;
=== Creating a minimal boot disc ===&lt;br /&gt;
&lt;br /&gt;
Using CPM2.2:&lt;br /&gt;
* Use disckit2 to format a vendor format disc&lt;br /&gt;
* Use BOOTGEN to put the CPM+ boot sector onto your disc. (Source is CPM+, Destination is your disk).&lt;br /&gt;
* Use FILECOPY to put C10CPM3.EMS onto your disc (FILECOPY C10CPM3.EMS. Source is CPM+, Destination is your disk).&lt;br /&gt;
* Your minimal CP/M+ disc is bootable.&lt;br /&gt;
&lt;br /&gt;
Using CPM3.3:&lt;br /&gt;
* Use disckit3 to format and install the boot sector onto the disc.&lt;br /&gt;
* Use PIP to copy C10CPM3.EMS to your disc (B:=A:C10CPM3.EMS)&lt;br /&gt;
* Your minimal CP/M+ disc is bootable.&lt;br /&gt;
&lt;br /&gt;
=== Terminal font ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;CP/M 3.0 terminal font&amp;quot;&amp;gt;&lt;br /&gt;
Image:Cpmplus.png&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Console Input ===&lt;br /&gt;
&lt;br /&gt;
Console input (via BDOS functions) uses firmware functions and returns firmware key codes when a key is pressed. i.e. &amp;amp;f0 is cursor up.&lt;br /&gt;
&lt;br /&gt;
=== Console Output/Terminal emulation ===&lt;br /&gt;
&lt;br /&gt;
Console output is processed via the terminal emulation. Console output doesn't execute firmware control codes.&lt;br /&gt;
&lt;br /&gt;
A simplified VT52 terminal is emulated. Home means the top-left position.&lt;br /&gt;
&lt;br /&gt;
The following are supported:&lt;br /&gt;
&lt;br /&gt;
 ESC 0 - disable status line&lt;br /&gt;
 ESC 1 - enable status line&lt;br /&gt;
 ESC 2 - set language&lt;br /&gt;
 ESC 3 - set screen mode?&lt;br /&gt;
 ESC A - cursor up&lt;br /&gt;
 ESC B - cursor down&lt;br /&gt;
 ESC C - cursor left&lt;br /&gt;
 ESC D - cursor right&lt;br /&gt;
 ESC E - clear screen and move cursor to home&lt;br /&gt;
 ESC H - move cursor to home&lt;br /&gt;
 ESC I - reverse line feed&lt;br /&gt;
 ESC J - erase to end of screen&lt;br /&gt;
 ESC K - erase to end of line&lt;br /&gt;
 ESC L - insert line&lt;br /&gt;
 ESC M - delete current&lt;br /&gt;
 ESC N - delete character and move characters up&lt;br /&gt;
 ESC Y - set cursor position&lt;br /&gt;
 ESC d - erase all above&lt;br /&gt;
 ESC b - set foreground&lt;br /&gt;
 ESC c - set background (and border)&lt;br /&gt;
 ESC e - enable cursor&lt;br /&gt;
 ESC f - disable cursor&lt;br /&gt;
 ESC j - save cursor pos&lt;br /&gt;
 ESC k - restore cursor pos&lt;br /&gt;
 ESC l - erase and above cursor&lt;br /&gt;
 ESC o - erase current line&lt;br /&gt;
 ESC p - invert on&lt;br /&gt;
 ESC q - invert off&lt;br /&gt;
 ESC r - select bright (recognised but not implemented)&lt;br /&gt;
 ESC u - cancel bright (recognised but not implemented)&lt;br /&gt;
 ESC v - wrap on&lt;br /&gt;
 ESC w - wrap off&lt;br /&gt;
 ESC x - mono mode&lt;br /&gt;
 ESC y - mono c080 mode&lt;br /&gt;
&lt;br /&gt;
PCW and Spectrum support viewports. This is not supported on CPC. CPC assumes a single viewport covering the entire screen and it is moved up/down using software when using insert line or delete current, but moved up using hardware otherwise.&lt;br /&gt;
&lt;br /&gt;
=== Memory layout ===&lt;br /&gt;
&lt;br /&gt;
* 1st 64KB has Amstrad's XBIOS (callable using 'userf'), CCP, BDOS, BIOS, screen and firmware. Screen is at &amp;amp;4000-&amp;amp;7fff. Firmware is used. AMSDOS is not used.&lt;br /&gt;
* &amp;amp;c1/&amp;amp;c2 are used, so that there is common code at &amp;amp;c000-&amp;amp;ffff. This common code has a small BDOS and BIOS. Most of the functions use trampoline code to transition to bank 0 and call into the XBIOS.&lt;br /&gt;
* 2nd 64KB has the TPA and the shared code.&lt;br /&gt;
a) Page C4 has WBOOT and BDOS jump + &amp;amp;100-&amp;amp;3f00 of the TPA. This calls to functions in Page c7.&lt;br /&gt;
b) Page C5 has &amp;amp;4000-&amp;amp;7fff of the TPA.&lt;br /&gt;
c) Page C6 has &amp;amp;8000-&amp;amp;bfff of the TPA.&lt;br /&gt;
d) Page C7 has &amp;amp;c000-&amp;amp;f2fb of the TPA. From &amp;amp;f2fc to &amp;amp;ffff is the trampoline code which transitions * to 1st bank of 64KB.&lt;br /&gt;
&lt;br /&gt;
=== Extra memory ===&lt;br /&gt;
&lt;br /&gt;
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').&lt;br /&gt;
&lt;br /&gt;
Therefore access to the additional RAM follows a pattern such as this:&lt;br /&gt;
* 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'.&lt;br /&gt;
* 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.&lt;br /&gt;
* Remember the current memory configuration (e.g. C1,C3,C0) &lt;br /&gt;
* 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.&lt;br /&gt;
* Then you need to restore the memory configuration (e.g. C1,C3,C0) and trampoline back to the TPA.&lt;br /&gt;
&lt;br /&gt;
Therefore extra memory access on the CPC is not as fast as it could be compared to running under AMSDOS.&lt;br /&gt;
&lt;br /&gt;
=== Implementing a storage device driver ===&lt;br /&gt;
&lt;br /&gt;
Using &amp;quot;drvtable&amp;quot; gets the list of DPH addresses for each drive. This is actually fixed at FE2F and is referenced by the XBIOS.&lt;br /&gt;
&lt;br /&gt;
Amstrad implemented the extended DPH in the Digital Research sample BIOS. The ten bytes before a DPH give the addresses of read/write functions:&lt;br /&gt;
&lt;br /&gt;
* -10,-9 - address of sector write function&lt;br /&gt;
* -8,-7 - address of sector read function&lt;br /&gt;
* -6,-5 - address of drive select function&lt;br /&gt;
* -4,-3 - address of drive init function (never called)&lt;br /&gt;
* -2 - physical drive number (for B: this is 0 on a single-drive system and 1 on a two-drive system)&lt;br /&gt;
* -1 - drive type&lt;br /&gt;
&lt;br /&gt;
The XBIOS calls these and assumes bank 0 is active. If you write a driver in TPA space you will need to transition to and from bank 1 using selbnk etc.&lt;br /&gt;
&lt;br /&gt;
The parameters for the read / write functions are at 0BEF0h:&lt;br /&gt;
 	DB	@adrv	;Selected logical drive&lt;br /&gt;
  	DB	@rdrv	;Selected physical drive (from the byte at DPH-2)&lt;br /&gt;
 	DW	@trk	;Track passed to SETTRK.&lt;br /&gt;
 	DW	@eect	;Sector passed to SETSEC.&lt;br /&gt;
 	DW	@dma	;DMA address passed to SETDMA.&lt;br /&gt;
 	DB	@cnt	;Multiple I/O count passed to MULTIO&lt;br /&gt;
 	DB	@dbnk	;DMA bank passed to SETBNK&lt;br /&gt;
&lt;br /&gt;
=== PALETTE.COM ===&lt;br /&gt;
&lt;br /&gt;
PALETTE is a COM program written by Locomotive Software and allows the colours to be changed.&lt;br /&gt;
The syntax is:&lt;br /&gt;
&lt;br /&gt;
PALETTE &amp;lt;palette index&amp;gt; &amp;lt;colour code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;palette index&amp;gt; is in the range 0-15 inclusive and defines the pen to change.&lt;br /&gt;
&amp;lt;colour code&amp;gt; is a r,g,b colour code with 2 bits for each colour defined in binary as r1 r0 g1 g0 b1 b0. Therefore black is 000000, bright white is 111111, white (grey) is 010101 and bright red is 110000.&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
* [https://www.seasip.info/Cpm/index.html John Elliott's information about CPM 2.2 and CPM+ on the Amstrad]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CP/M]][[Category:Operating System]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Amstore&amp;diff=103694</id>
		<title>Amstore</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Amstore&amp;diff=103694"/>
				<updated>2019-09-25T10:13:38Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: Named the network software as Simplenet.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Amstrad Computer User8607066.jpg|thumb|right|350px|Commercial in Amstrad Computer User for Amstore]]&lt;br /&gt;
&lt;br /&gt;
The [[Amstore]] from [[Northern Computers Ltd.]] (UK) is a 20MB hard disk for &amp;quot;all existing Amstrad computers&amp;quot; connected by a network.&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
Amstore was connected through a Multilink network, a token-passing multi-user ring network. The network could be used with any Amstrad machine and with IBM PC, Apricot, BBC and Apple computers. The networking software was Simplenet by [[Nine Tiles Ltd.]]&lt;br /&gt;
&lt;br /&gt;
The Amstore Harddisk (and the Amstrad computers) are connected as a 'stations' to this network. There can be max 120 stations, max 3km apart.&lt;br /&gt;
&lt;br /&gt;
Short review on [[:File:ACU8512-078.jpg]].&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
At the Centre for Computing History:&lt;br /&gt;
* [http://www.computinghistory.org.uk/det/51548/Amstore/ Pre-production Amstore]&lt;br /&gt;
* [http://www.computinghistory.org.uk/det/51447/Nine-Tiles-Amstrad-Multilink-Network-Interface/ Amstrad Multilink network interface]&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals]][[Category:Network]][[Category:DATA Storage]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Amstore&amp;diff=103693</id>
		<title>Amstore</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Amstore&amp;diff=103693"/>
				<updated>2019-09-25T09:47:44Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: Added links to Centre for Computing History&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Amstrad Computer User8607066.jpg|thumb|right|350px|Commercial in Amstrad Computer User for Amstore]]&lt;br /&gt;
&lt;br /&gt;
The [[Amstore]] from [[Northern Computers Ltd.]] (UK) is a 20MB hard disk for &amp;quot;all existing Amstrad computers&amp;quot; connected by a network.&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
Amstore was connected through a Multilink network, a token-passing multi-user ring network. The network could be used with any Amstrad machine and with IBM PC, Apricot, BBC and Apple computers.&lt;br /&gt;
&lt;br /&gt;
The Amstore Harddisk (and the Amstrad computers) are connected as a 'stations' to this network. There can be max 120 stations, max 3km apart.&lt;br /&gt;
&lt;br /&gt;
Short review on [[:File:ACU8512-078.jpg]].&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
At the Centre for Computing History:&lt;br /&gt;
* [http://www.computinghistory.org.uk/det/51548/Amstore/ Prototype Amstore]&lt;br /&gt;
* [http://www.computinghistory.org.uk/det/51447/Nine-Tiles-Amstrad-Multilink-Network-Interface/ Amstrad Multilink network interface]&lt;br /&gt;
&lt;br /&gt;
[[Category:Peripherals]][[Category:Network]][[Category:DATA Storage]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=DkTronics_CPM&amp;diff=103112</id>
		<title>DkTronics CPM</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=DkTronics_CPM&amp;diff=103112"/>
				<updated>2019-04-05T09:51:49Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CPM+ with Memory expansions ==&lt;br /&gt;
&lt;br /&gt;
CP/M+ already supports the Dk'Tronics RAM expansion but the CP/M+ on the system discs doesn't run on the CPC464/664 because it uses firmware v1.1 calls. Dk'Tronics provide patches to allow it to run on the 464/664.&lt;br /&gt;
&lt;br /&gt;
One version is run as follows:&lt;br /&gt;
&lt;br /&gt;
 RUN&amp;quot;BANK&lt;br /&gt;
&lt;br /&gt;
Press RETURN at the prompt. Then:&lt;br /&gt;
&lt;br /&gt;
 |EMULATE&lt;br /&gt;
 |CPM&lt;br /&gt;
&lt;br /&gt;
The disc boots, executes PATCH from PROFILE.SUB and is then ready to use.&lt;br /&gt;
&lt;br /&gt;
The other version doesn't require BANK. You only need to type:&lt;br /&gt;
 |CPM&lt;br /&gt;
&lt;br /&gt;
=== Technical ===&lt;br /&gt;
The patch to C10CPM3.EMS is a single-byte change, to ignore the result of the ROM version check:&lt;br /&gt;
&lt;br /&gt;
  ld      c, 0FFh&lt;br /&gt;
  call    KL_PROBE_ROM&lt;br /&gt;
  ld      de, -513  ; Check that ROM is version 0201h&lt;br /&gt;
  add     hl, de&lt;br /&gt;
  ld      a, h&lt;br /&gt;
  or      l&lt;br /&gt;
  ret     z    ; DK'Tronics replaces this with a plain RET&lt;br /&gt;
&lt;br /&gt;
== CPM+ with Silicon Disk ==&lt;br /&gt;
&lt;br /&gt;
The Silicon Disk rom has a command &amp;quot;|SETCPMPLUS&amp;quot; which patches the Amstrad CP/M with support for the Silicon disk. The resulting EMS file is called CPM3SEMI.EMS.&lt;br /&gt;
&lt;br /&gt;
===Technical===&lt;br /&gt;
&lt;br /&gt;
The |SETCPMPLUS command creates a file called PATCHER.COM, which contains (at offset 689h) a table of changes to make. The changes are made blindly to the first EMS file that PATCHER.COM finds; the user is responsible for ensuring it is run on a genuine C10CPM3.EMS.&lt;br /&gt;
&lt;br /&gt;
Each change is formed:&lt;br /&gt;
&lt;br /&gt;
  DW	start	;Address of first byte to change&lt;br /&gt;
  DW	end	;Address of last byte to change&lt;br /&gt;
  DB	data	;Replacement bytes&lt;br /&gt;
&lt;br /&gt;
The addresses are as if the EMS file was loaded at 0100h.&lt;br /&gt;
====Initialisation====&lt;br /&gt;
&lt;br /&gt;
The first few changes are to the initialisation code at the start of the EMS file:&lt;br /&gt;
&lt;br /&gt;
  DW	107h	;Replace a call to 0BD19h (MC_WAIT_FLYBACK) with a&lt;br /&gt;
  DW	108h	;call to initialise the ramdisc.&lt;br /&gt;
  DW	7100h&lt;br /&gt;
&lt;br /&gt;
  DW	1C5h	;Remove the LDIR that clears memory between&lt;br /&gt;
  DW	1C6h	;0FE58h and 0FF9Fh (this has been populated by the. &lt;br /&gt;
  DW	0	;initialisation call).&lt;br /&gt;
&lt;br /&gt;
  DW	1D5h	;Place a RET at the start of the firmware version	&lt;br /&gt;
  DW	1D5h	;check, so that CP/M will run on a 464/664.&lt;br /&gt;
  DB	0C9h&lt;br /&gt;
&lt;br /&gt;
  DW	358h	;Display the Silicon Disk sign-on message.&lt;br /&gt;
  DW	359h&lt;br /&gt;
  DW	0FE80h	&lt;br /&gt;
&lt;br /&gt;
The first change sets up the call to the code that initialises the ramdisc. This code consists of 512 bytes added to the end of the EMS file; since it is not trying to fit in spare space within the existing CP/M system, it is not as constrained for memory as the other patches.&lt;br /&gt;
&lt;br /&gt;
The initialisation code copies itself to 0100h, and runs from there. The first thing it does is probe for available memory. There are two possible memory ranges: 192k (banks CC-CF, D4-D7, DC-DF) and 256k (banks E4-E7, EC-EF, F4-F7, FC-FF). The ramdisc can occupy either or both. If neither range is available, no drive is added to the system, and a minimal version of the sign-on routine (which displays no message) is constructed at 0FE80h.&lt;br /&gt;
&lt;br /&gt;
Assuming that memory was found, the DPH for the new drive is added to the drive table. The first memory bank of the ramdisc is paged in, and the system checks that the first byte of each directory entry is either 0E5h or 00h-0Fh. If it is not, the entire first bank is cleared to 0E5h. This means that the presence of CP/M disc labels or date stamps will cause the ramdisc to be erased on boot.&lt;br /&gt;
&lt;br /&gt;
The appropriate DPB for the size of ramdisc is copied to 0FF53h and the sign-on message altered to hold the correct size. The full version of the sign-on code is copied to 0FE80h.&lt;br /&gt;
&lt;br /&gt;
Finally memory from 0FF64h to 0FF9Fh is blanked and the code resumes the normal initialisation sequence by jumping to MC_WAIT_FLYBACK.&lt;br /&gt;
====Helper functions====&lt;br /&gt;
&lt;br /&gt;
After initialisation, the next two patches are helper functions, which occupy free space between CP/M modules. One is at 03E9h, in the gap between the CD and TE modules; the other at 0EE2h, in the gap at the end of DD. The first one backs up 128 bytes of memory at 8080h (which is normally used by the font) so it becomes available as a transfer buffer. The second reverses this, restoring the font.&lt;br /&gt;
====Disk access====&lt;br /&gt;
&lt;br /&gt;
The disk access functions follow; these are placed between 8960h and 89FFh, in memory that's probably reserved for the system message table. Since they page memory, they switch to a local stack, which grows down from 3CFEh.&lt;br /&gt;
&lt;br /&gt;
The actual I/O functions are reasonably simple. READ pages in the correct bank, copies 128 bytes to the transfer buffer at 8080h, and then uses the CP/M XMOVE and MOVE functions to copy the data to the right place. WRITE performs similar operations in reverse order; XMOVE and MOVE to get the data to 8080h, then page in the correct bank and copy the data there.&lt;br /&gt;
&lt;br /&gt;
The other two operations are LOGIN (which consists simply of&lt;br /&gt;
&lt;br /&gt;
  EX	DE, HL	;DPH is passed in DE, should be returned in HL on&lt;br /&gt;
  RET		;success&lt;br /&gt;
&lt;br /&gt;
) and INIT (a simple RET).&lt;br /&gt;
====Banked BIOS====&lt;br /&gt;
&lt;br /&gt;
The next few changes allocate space for the extra DPB. In a stock CPC CP/M Plus, the stack grows down from 0FF64h. In CPM3SEMI this is lowered to 0FF53h, freeing up 17 bytes for the drive DPB.&lt;br /&gt;
&lt;br /&gt;
Space also needs to be allocated for the DPH. The existing subroutine at 3FE0h is moved to 3FD0h (removing 16 apparently unused bytes) and then the new DPH occupies 3FD7h - 3FF9h.&lt;br /&gt;
&lt;br /&gt;
The new drive also requires space for an allocation vector. This is placed at 3C89h, in memory intended for patches to the BDOS.&lt;br /&gt;
&lt;br /&gt;
== CPM2.2 with Memory Expansions ==&lt;br /&gt;
&lt;br /&gt;
Dk'tronics Bank Switch software comes with NEWCPM.COM CP/M program which installs a 61K TPA CPM2.2 which uses the Dk'Tronics RAM. The documents describe how to make this CPM. They are repeated here and a pre-made dsk is linked to this page.&lt;br /&gt;
&lt;br /&gt;
===Creating the DkTronics 61K TPA CPM 2.2===&lt;br /&gt;
&lt;br /&gt;
Boot into CPM2.2 from system discs:&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;disckit2&lt;br /&gt;
&lt;br /&gt;
Use disckit2 to format a vendor disc. This will become 'Dk'Tonics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;BOOTGEN&lt;br /&gt;
This initialises the boot sector.&lt;br /&gt;
&lt;br /&gt;
Source is: CPM 2.2 disk.&lt;br /&gt;
Now insert 'Dk'tronics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 A&amp;gt;SYSGEN&lt;br /&gt;
This puts CPM2.2 onto the disc.&lt;br /&gt;
Source is CPM2.2 disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY movcpm.com&lt;br /&gt;
This puts movcpm.com onto the disk.&lt;br /&gt;
Source is 'CPM 2.2 system disc' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY save.com&lt;br /&gt;
This puts save.com onto the disk.&lt;br /&gt;
Source is 'CPM 2.2 system disc' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY newcpm.com&lt;br /&gt;
This transfers Dk'Tronics newcpm.com.&lt;br /&gt;
Source is 'Dk'Tronics bank switch software' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY oldcpm.com&lt;br /&gt;
This transfers Dk'Tronics oldcpm.com.&lt;br /&gt;
Source is 'Dk'Tronics bank switch software' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
Now boot the Dk'Tronics CPM Disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;MOVCPM 255 *&lt;br /&gt;
&lt;br /&gt;
This configures a 63K CPM.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;SAVE 34 NEWCPM.SYS&lt;br /&gt;
&lt;br /&gt;
This saves a 63K CPM for Dk'Tronics CPM to use.&lt;br /&gt;
&lt;br /&gt;
Your Dk'Tronics CPM is setup.&lt;br /&gt;
&lt;br /&gt;
=== Technical ===&lt;br /&gt;
&lt;br /&gt;
* 61K TPA is not active until NEWCPM.COM is run.&lt;br /&gt;
* 61K CPM is stored in &amp;quot;NEWCPM.SYS&amp;quot; and is loaded by NEWCPM.COM&lt;br /&gt;
&lt;br /&gt;
====NEWCPM.COM====&lt;br /&gt;
* NEWCPM.COM is a normal COM file. It is loaded like a normal COM file. It resides in memory in bank 0 but configures a 61K CPM in bank 1 and transfers control to it. It remains in bank 0 and implements parts of the 61K CPM BIOS.&lt;br /&gt;
* NEWCPM.COM sets up a BIOS jumpblock in page C7 at &amp;amp;FC00. This calls into the resident NEWCPM.COM code in bank 0&lt;br /&gt;
* NEWCPM.SYS is first loaded to B00 in bank 0, it is later copied into bank 1 to it's correct location.&lt;br /&gt;
&lt;br /&gt;
TPA upper address is &amp;amp;F300. BIOS jump is at &amp;amp;FC00. Code after &amp;amp;FC00 is part of the BIOS in bank 1.&lt;br /&gt;
&lt;br /&gt;
====OLDCPM.COM====&lt;br /&gt;
&lt;br /&gt;
* OLDCPM.COM is much simpler than NEWCPM.COM. It restores the dormant CPM in bank 0. If NEWCPM.COM was used it remains dormant in bank 1.&lt;br /&gt;
&lt;br /&gt;
== CPM 2.2 with Silicon Disk ==&lt;br /&gt;
&lt;br /&gt;
The Silicon Disk has a command &amp;quot;|SETCPM&amp;quot; which patches CPM2.2 for the Silicon Disk.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [[File:Dkcpm.dsk]] - CPM2.2 configured for 61K TPA - This was made following instructions in the Bank software&lt;br /&gt;
* [[File:Dkplusbank.dsk]] - CPM3.0 with Dk'tronics PATCH (run BANK first) - This was made following instructions&lt;br /&gt;
* [[File:Dkplusnobank.dsk]] - CPM3.0 with Dk'tronics PATCH (BANK not required) - This was made following instructions &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Operating System]][[Category:CP/M]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=DkTronics_CPM&amp;diff=103111</id>
		<title>DkTronics CPM</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=DkTronics_CPM&amp;diff=103111"/>
				<updated>2019-04-05T09:51:07Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: Formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CPM+ with Memory expansions ==&lt;br /&gt;
&lt;br /&gt;
CP/M+ already supports the Dk'Tronics RAM expansion but the CP/M+ on the system discs doesn't run on the CPC464/664 because it uses firmware v1.1 calls. Dk'Tronics provide patches to allow it to run on the 464/664.&lt;br /&gt;
&lt;br /&gt;
One version is run as follows:&lt;br /&gt;
&lt;br /&gt;
 RUN&amp;quot;BANK&lt;br /&gt;
&lt;br /&gt;
Press RETURN at the prompt. Then:&lt;br /&gt;
&lt;br /&gt;
 |EMULATE&lt;br /&gt;
 |CPM&lt;br /&gt;
&lt;br /&gt;
The disc boots, executes PATCH from PROFILE.SUB and is then ready to use.&lt;br /&gt;
&lt;br /&gt;
The other version doesn't require BANK. You only need to type:&lt;br /&gt;
 |CPM&lt;br /&gt;
&lt;br /&gt;
=== Technical ===&lt;br /&gt;
The patch to C10CPM3.EMS is a single-byte change, to ignore the result of the ROM version check:&lt;br /&gt;
&lt;br /&gt;
  ld      c, 0FFh&lt;br /&gt;
  call    KL_PROBE_ROM&lt;br /&gt;
  ld      de, -513  ; Check that ROM is version 0201h&lt;br /&gt;
  add     hl, de&lt;br /&gt;
  ld      a, h&lt;br /&gt;
  or      l&lt;br /&gt;
  ret     z    ; DK'Tronics replaces this with a plain RET&lt;br /&gt;
&lt;br /&gt;
== CPM+ with Silicon Disk ==&lt;br /&gt;
&lt;br /&gt;
The Silicon Disk rom has a command &amp;quot;|SETCPMPLUS&amp;quot; which patches the Amstrad CP/M with support for the Silicon disk. The resulting EMS file is called CPM3SEMI.EMS.&lt;br /&gt;
&lt;br /&gt;
===Technical===&lt;br /&gt;
&lt;br /&gt;
The |SETCPMPLUS command creates a file called PATCHER.COM, which contains (at offset 689h) a table of changes to make. The changes are made blindly to the first EMS file that PATCHER.COM finds; the user is responsible for ensuring it is run on a genuine C10CPM3.EMS.&lt;br /&gt;
&lt;br /&gt;
Each change is formed:&lt;br /&gt;
&lt;br /&gt;
  DW	start	;Address of first byte to change&lt;br /&gt;
  DW	end	;Address of last byte to change&lt;br /&gt;
  DB	data	;Replacement bytes&lt;br /&gt;
&lt;br /&gt;
The addresses are as if the EMS file was loaded at 0100h.&lt;br /&gt;
====Initialisation====&lt;br /&gt;
&lt;br /&gt;
The first few changes are to the initialisation code at the start of the EMS file:&lt;br /&gt;
&lt;br /&gt;
  DW	107h	;Replace a call to 0BD19h (MC_WAIT_FLYBACK) with a&lt;br /&gt;
  DW	108h	;call to initialise the ramdisc.&lt;br /&gt;
  DW	7100h&lt;br /&gt;
&lt;br /&gt;
  DW	1C5h	;Remove the LDIR that clears memory between&lt;br /&gt;
  DW	1C6h	;0FE58h and 0FF9Fh (this has been populated by the. &lt;br /&gt;
  DW	0	;initialisation call).&lt;br /&gt;
&lt;br /&gt;
  DW	1D5h	;Place a RET at the start of the firmware version	&lt;br /&gt;
  DW	1D5h	;check, so that CP/M will run on a 464/664.&lt;br /&gt;
  DB	0C9h&lt;br /&gt;
&lt;br /&gt;
  DW	358h	;Display the Silicon Disk sign-on message.&lt;br /&gt;
  DW	359h&lt;br /&gt;
  DW	0FE80h	&lt;br /&gt;
&lt;br /&gt;
The first change sets up the call to the code that initialises the ramdisc. This code consists of 512 bytes added to the end of the EMS file; since it is not trying to fit in spare space within the existing CP/M system, it is not as constrained for memory as the other patches.&lt;br /&gt;
&lt;br /&gt;
The initialisation code copies itself to 0100h, and runs from there. The first thing it does is probe for available memory. There are two possible memory ranges: 192k (banks CC-CF, D4-D7, DC-DF) and 256k (banks E4-E7, EC-EF, F4-F7, FC-FF). The ramdisc can occupy either or both. If neither range is available, no drive is added to the system, and a minimal version of the sign-on routine (which displays no message) is constructed at 0FE80h.&lt;br /&gt;
&lt;br /&gt;
Assuming that memory was found, the DPH for the new drive is added to the drive table. The first memory bank of the ramdisc is paged in, and the system checks that the first byte of each directory entry is either 0E5h or 00h-0Fh. If it is not, the entire first bank is cleared to 0E5h. This means that the presence of CP/M disc labels or date stamps will cause the ramdisc to be erased on boot.&lt;br /&gt;
&lt;br /&gt;
The appropriate DPB for the size of ramdisc is copied to 0FF53h and the sign-on message altered to hold the correct size. The full version of the sign-on code is copied to 0FE80h.&lt;br /&gt;
&lt;br /&gt;
Finally memory from 0FF64h to 0FF9Fh is blanked and the code resumes the normal initialisation sequence by jumping to MC_WAIT_FLYBACK.&lt;br /&gt;
====Helper functions====&lt;br /&gt;
&lt;br /&gt;
After initialisation, the next two patches are helper functions, which occupy free space between CP/M modules. One is at 03E9h, in the gap between the CD and TE modules; the other at 0EE2h, in the gap at the end of DD. The first one backs up 128 bytes of memory at 8080h (which is normally used by the font) so it becomes available as a transfer buffer. The second reverses this, restoring the font.&lt;br /&gt;
====Disk access====&lt;br /&gt;
&lt;br /&gt;
The disk access functions follow; these are placed between 8960h and 89FFh, in memory that's probably reserved for the system message table. Since they page memory, they switch to a local stack, which grows down from 3CFEh.&lt;br /&gt;
&lt;br /&gt;
The actual I/O functions are reasonably simple. READ pages in the correct bank, copies 128 bytes to the transfer buffer at 8080h, and then uses the CP/M XMOVE and MOVE functions to copy the data to the right place. WRITE performs similar operations in reverse order; XMOVE and MOVE to get the data to 8080h, then page in the correct bank and copy the data there.&lt;br /&gt;
&lt;br /&gt;
The other two operations are LOGIN (which consists simply of&lt;br /&gt;
&lt;br /&gt;
  EX	DE, HL	;DPH is passed in DE, should be returned in HL on&lt;br /&gt;
  RET		;success&lt;br /&gt;
&lt;br /&gt;
) and FLUSH (a simple RET).&lt;br /&gt;
====Banked BIOS====&lt;br /&gt;
&lt;br /&gt;
The next few changes allocate space for the extra DPB. In a stock CPC CP/M Plus, the stack grows down from 0FF64h. In CPM3SEMI this is lowered to 0FF53h, freeing up 17 bytes for the drive DPB.&lt;br /&gt;
&lt;br /&gt;
Space also needs to be allocated for the DPH. The existing subroutine at 3FE0h is moved to 3FD0h (removing 16 apparently unused bytes) and then the new DPH occupies 3FD7h - 3FF9h.&lt;br /&gt;
&lt;br /&gt;
The new drive also requires space for an allocation vector. This is placed at 3C89h, in memory intended for patches to the BDOS.&lt;br /&gt;
&lt;br /&gt;
== CPM2.2 with Memory Expansions ==&lt;br /&gt;
&lt;br /&gt;
Dk'tronics Bank Switch software comes with NEWCPM.COM CP/M program which installs a 61K TPA CPM2.2 which uses the Dk'Tronics RAM. The documents describe how to make this CPM. They are repeated here and a pre-made dsk is linked to this page.&lt;br /&gt;
&lt;br /&gt;
===Creating the DkTronics 61K TPA CPM 2.2===&lt;br /&gt;
&lt;br /&gt;
Boot into CPM2.2 from system discs:&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;disckit2&lt;br /&gt;
&lt;br /&gt;
Use disckit2 to format a vendor disc. This will become 'Dk'Tonics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;BOOTGEN&lt;br /&gt;
This initialises the boot sector.&lt;br /&gt;
&lt;br /&gt;
Source is: CPM 2.2 disk.&lt;br /&gt;
Now insert 'Dk'tronics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 A&amp;gt;SYSGEN&lt;br /&gt;
This puts CPM2.2 onto the disc.&lt;br /&gt;
Source is CPM2.2 disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY movcpm.com&lt;br /&gt;
This puts movcpm.com onto the disk.&lt;br /&gt;
Source is 'CPM 2.2 system disc' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY save.com&lt;br /&gt;
This puts save.com onto the disk.&lt;br /&gt;
Source is 'CPM 2.2 system disc' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY newcpm.com&lt;br /&gt;
This transfers Dk'Tronics newcpm.com.&lt;br /&gt;
Source is 'Dk'Tronics bank switch software' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY oldcpm.com&lt;br /&gt;
This transfers Dk'Tronics oldcpm.com.&lt;br /&gt;
Source is 'Dk'Tronics bank switch software' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
Now boot the Dk'Tronics CPM Disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;MOVCPM 255 *&lt;br /&gt;
&lt;br /&gt;
This configures a 63K CPM.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;SAVE 34 NEWCPM.SYS&lt;br /&gt;
&lt;br /&gt;
This saves a 63K CPM for Dk'Tronics CPM to use.&lt;br /&gt;
&lt;br /&gt;
Your Dk'Tronics CPM is setup.&lt;br /&gt;
&lt;br /&gt;
=== Technical ===&lt;br /&gt;
&lt;br /&gt;
* 61K TPA is not active until NEWCPM.COM is run.&lt;br /&gt;
* 61K CPM is stored in &amp;quot;NEWCPM.SYS&amp;quot; and is loaded by NEWCPM.COM&lt;br /&gt;
&lt;br /&gt;
====NEWCPM.COM====&lt;br /&gt;
* NEWCPM.COM is a normal COM file. It is loaded like a normal COM file. It resides in memory in bank 0 but configures a 61K CPM in bank 1 and transfers control to it. It remains in bank 0 and implements parts of the 61K CPM BIOS.&lt;br /&gt;
* NEWCPM.COM sets up a BIOS jumpblock in page C7 at &amp;amp;FC00. This calls into the resident NEWCPM.COM code in bank 0&lt;br /&gt;
* NEWCPM.SYS is first loaded to B00 in bank 0, it is later copied into bank 1 to it's correct location.&lt;br /&gt;
&lt;br /&gt;
TPA upper address is &amp;amp;F300. BIOS jump is at &amp;amp;FC00. Code after &amp;amp;FC00 is part of the BIOS in bank 1.&lt;br /&gt;
&lt;br /&gt;
====OLDCPM.COM====&lt;br /&gt;
&lt;br /&gt;
* OLDCPM.COM is much simpler than NEWCPM.COM. It restores the dormant CPM in bank 0. If NEWCPM.COM was used it remains dormant in bank 1.&lt;br /&gt;
&lt;br /&gt;
== CPM 2.2 with Silicon Disk ==&lt;br /&gt;
&lt;br /&gt;
The Silicon Disk has a command &amp;quot;|SETCPM&amp;quot; which patches CPM2.2 for the Silicon Disk.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [[File:Dkcpm.dsk]] - CPM2.2 configured for 61K TPA - This was made following instructions in the Bank software&lt;br /&gt;
* [[File:Dkplusbank.dsk]] - CPM3.0 with Dk'tronics PATCH (run BANK first) - This was made following instructions&lt;br /&gt;
* [[File:Dkplusnobank.dsk]] - CPM3.0 with Dk'tronics PATCH (BANK not required) - This was made following instructions &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Operating System]][[Category:CP/M]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=DkTronics_CPM&amp;diff=103051</id>
		<title>DkTronics CPM</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=DkTronics_CPM&amp;diff=103051"/>
				<updated>2019-03-06T11:42:04Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: /* CPM+ with Memory expansions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CPM+ with Memory expansions ==&lt;br /&gt;
&lt;br /&gt;
CP/M+ already supports the Dk'Tronics RAM expansion but the CP/M+ on the system discs doesn't run on the CPC464/664 because it uses firmware v1.1 calls. Dk'Tronics provide patches to allow it to run on the 464/664.&lt;br /&gt;
&lt;br /&gt;
One version is run as follows:&lt;br /&gt;
&lt;br /&gt;
 RUN&amp;quot;BANK&lt;br /&gt;
&lt;br /&gt;
Press RETURN at the prompt. Then:&lt;br /&gt;
&lt;br /&gt;
 |EMULATE&lt;br /&gt;
 |CPM&lt;br /&gt;
&lt;br /&gt;
The disc boots, executes PATCH from PROFILE.SUB and is then ready to use.&lt;br /&gt;
&lt;br /&gt;
The other version doesn't require BANK. You only need to type:&lt;br /&gt;
 |CPM&lt;br /&gt;
&lt;br /&gt;
=== Technical ===&lt;br /&gt;
The patch to C10CPM3.EMS is a single-byte change, to ignore the result of the ROM version check:&lt;br /&gt;
&lt;br /&gt;
  ld      c, 0FFh&lt;br /&gt;
  call    KL_PROBE_ROM&lt;br /&gt;
  ld      de, -513  ; Check that ROM is version 0201h&lt;br /&gt;
  add     hl, de&lt;br /&gt;
  ld      a, h&lt;br /&gt;
  or      l&lt;br /&gt;
  ret     z    ; DK'Tronics replaces this with a plain RET&lt;br /&gt;
&lt;br /&gt;
== CPM+ with Silicon Disk ==&lt;br /&gt;
&lt;br /&gt;
The Silicon Disk rom has a command &amp;quot;|SETCPMPLUS&amp;quot; which patches the Amstrad CP/M with support for the Silicon disk. The resulting EMS file is called CPM3SEMI.EMS.&lt;br /&gt;
&lt;br /&gt;
===Technical===&lt;br /&gt;
&lt;br /&gt;
The |SETCPMPLUS command creates a file called PATCHER.COM, which contains (at offset 689h) a table of changes to make. The changes are made blindly to the first EMS file that PATCHER.COM finds; the user is responsible for ensuring it is run on a genuine C10CPM3.EMS.&lt;br /&gt;
&lt;br /&gt;
Each change is formed:&lt;br /&gt;
&lt;br /&gt;
  DW	start	;Address of first byte to change&lt;br /&gt;
  DW	end	;Address of last byte to change&lt;br /&gt;
  DB	data	;Replacement bytes&lt;br /&gt;
&lt;br /&gt;
The addresses are as if the EMS file was loaded at 0100h.&lt;br /&gt;
====Initialisation====&lt;br /&gt;
&lt;br /&gt;
The first few changes are to the initialisation code at the start of the EMS file:&lt;br /&gt;
&lt;br /&gt;
  DW	107h	;Replace a call to 0BD19h (MC_WAIT_FLYBACK) with a&lt;br /&gt;
  DW	108h	;call to initialise the ramdisc.&lt;br /&gt;
  DW	7100h&lt;br /&gt;
&lt;br /&gt;
  DW	1C5h	;Remove the LDIR that clears memory between&lt;br /&gt;
  DW	1C6h	;0FE58h and 0FF9Fh (this has been populated by the. &lt;br /&gt;
  DW	0	;initialisation call).&lt;br /&gt;
&lt;br /&gt;
  DW	1D5h	;Place a RET at the start of the firmware version	&lt;br /&gt;
  DW	1D5h	;check, so that CP/M will run on a 464/664.&lt;br /&gt;
  DB	0C9h&lt;br /&gt;
&lt;br /&gt;
  DW	358h	;Display the Silicon Disk sign-on message.&lt;br /&gt;
  DW	359h&lt;br /&gt;
  DW	0FE80h	&lt;br /&gt;
&lt;br /&gt;
The first change sets up the call to the code that initialises the ramdisc. This code consists of 512 bytes added to the end of the EMS file; since it is not trying to fit in spare space within the existing CP/M system, it is not as constrained for memory as the other patches.&lt;br /&gt;
&lt;br /&gt;
The initialisation code copies itself to 0100h, and runs from there. The first thing it does is probe for available memory. There are two possible memory ranges: 192k (banks CC-CF, D4-D7, DC-DF) and 256k (banks E4-E7, EC-EF, F4-F7, FC-FF). The ramdisc can occupy either or both. If neither range is available, no drive is added to the system, and a minimal version of the sign-on routine (which displays no message) is constructed at 0FE80h.&lt;br /&gt;
&lt;br /&gt;
Assuming that memory was found, the DPH for the new drive is added to the drive table. The first memory bank of the ramdisc is paged in, and the system checks that the first byte of each directory entry is either 0E5h or 00h-0Fh. If it is not, the entire first bank is cleared to 0E5h. This means that the presence of CP/M disc labels or date stamps will cause the ramdisc to be erased on boot.&lt;br /&gt;
&lt;br /&gt;
The appropriate DPB for the size of ramdisc is copied to 0FF53h and the sign-on message altered to hold the correct size. The full version of the sign-on code is copied to 0FE80h.&lt;br /&gt;
&lt;br /&gt;
Finally memory from 0FF64h to 0FF9Fh is blanked and the code resumes the normal initialisation sequence by jumping to MC_WAIT_FLYBACK.&lt;br /&gt;
====Helper functions====&lt;br /&gt;
&lt;br /&gt;
After initialisation, the next two patches are helper functions, which occupy free space between CP/M modules. One is at 03E9h, in the gap between the CD and TE modules; the other at 0EE2h, in the gap at the end of DD. The first one backs up 128 bytes of memory at 8080h (which is normally used by the font) so it becomes available as a transfer buffer. The second reverses this, restoring the font.&lt;br /&gt;
Disk access&lt;br /&gt;
&lt;br /&gt;
The disk access functions follow; these are placed between 8960h and 89FFh, in memory that's probably reserved for the system message table. Since they page memory, they switch to a local stack, which grows down from 3CFEh.&lt;br /&gt;
&lt;br /&gt;
The actual I/O functions are reasonably simple. READ pages in the correct bank, copies 128 bytes to the transfer buffer at 8080h, and then uses the CP/M XMOVE and MOVE functions to copy the data to the right place. WRITE performs similar operations in reverse order; XMOVE and MOVE to get the data to 8080h, then page in the correct bank and copy the data there.&lt;br /&gt;
&lt;br /&gt;
The other two operations are LOGIN (which consists simply of&lt;br /&gt;
&lt;br /&gt;
  EX	DE, HL	;DPH is passed in DE, should be returned in HL on&lt;br /&gt;
  RET		;success&lt;br /&gt;
&lt;br /&gt;
) and FLUSH (a simple RET).&lt;br /&gt;
====Banked BIOS====&lt;br /&gt;
&lt;br /&gt;
The next few changes allocate space for the extra DPB. In a stock CPC CP/M Plus, the stack grows down from 0FF64h. In CPM3SEMI this is lowered to 0FF53h, freeing up 17 bytes for the drive DPB.&lt;br /&gt;
&lt;br /&gt;
Space also needs to be allocated for the DPH. The existing subroutine at 3FE0h is moved to 3FD0h (removing 16 apparently unused bytes) and then the new DPH occupies 3FD7h - 3FF9h.&lt;br /&gt;
&lt;br /&gt;
The new drive also requires space for an allocation vector. This is placed at 3C89h, in memory intended for patches to the BDOS.&lt;br /&gt;
&lt;br /&gt;
== CPM2.2 with Memory Expansions ==&lt;br /&gt;
&lt;br /&gt;
Dk'tronics Bank Switch software comes with NEWCPM.COM CP/M program which installs a 61K TPA CPM2.2 which uses the Dk'Tronics RAM. The documents describe how to make this CPM. They are repeated here and a pre-made dsk is linked to this page.&lt;br /&gt;
&lt;br /&gt;
===Creating the DkTronics 61K TPA CPM 2.2===&lt;br /&gt;
&lt;br /&gt;
Boot into CPM2.2 from system discs:&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;disckit2&lt;br /&gt;
&lt;br /&gt;
Use disckit2 to format a vendor disc. This will become 'Dk'Tonics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;BOOTGEN&lt;br /&gt;
This initialises the boot sector.&lt;br /&gt;
&lt;br /&gt;
Source is: CPM 2.2 disk.&lt;br /&gt;
Now insert 'Dk'tronics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 A&amp;gt;SYSGEN&lt;br /&gt;
This puts CPM2.2 onto the disc.&lt;br /&gt;
Source is CPM2.2 disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY movcpm.com&lt;br /&gt;
This puts movcpm.com onto the disk.&lt;br /&gt;
Source is 'CPM 2.2 system disc' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY save.com&lt;br /&gt;
This puts save.com onto the disk.&lt;br /&gt;
Source is 'CPM 2.2 system disc' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY newcpm.com&lt;br /&gt;
This transfers Dk'Tronics newcpm.com.&lt;br /&gt;
Source is 'Dk'Tronics bank switch software' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY oldcpm.com&lt;br /&gt;
This transfers Dk'Tronics oldcpm.com.&lt;br /&gt;
Source is 'Dk'Tronics bank switch software' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
Now boot the Dk'Tronics CPM Disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;MOVCPM 255 *&lt;br /&gt;
&lt;br /&gt;
This configures a 63K CPM.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;SAVE 34 NEWCPM.SYS&lt;br /&gt;
&lt;br /&gt;
This saves a 63K CPM for Dk'Tronics CPM to use.&lt;br /&gt;
&lt;br /&gt;
Your Dk'Tronics CPM is setup.&lt;br /&gt;
&lt;br /&gt;
=== Technical ===&lt;br /&gt;
&lt;br /&gt;
* 61K TPA is not active until NEWCPM.COM is run.&lt;br /&gt;
* 61K CPM is stored in &amp;quot;NEWCPM.SYS&amp;quot; and is loaded by NEWCPM.COM&lt;br /&gt;
&lt;br /&gt;
====NEWCPM.COM====&lt;br /&gt;
* NEWCPM.COM is a normal COM file. It is loaded like a normal COM file. It resides in memory in bank 0 but configures a 61K CPM in bank 1 and transfers control to it. It remains in bank 0 and implements parts of the 61K CPM BIOS.&lt;br /&gt;
* NEWCPM.COM sets up a BIOS jumpblock in page C7 at &amp;amp;FC00. This calls into the resident NEWCPM.COM code in bank 0&lt;br /&gt;
* NEWCPM.SYS is first loaded to B00 in bank 0, it is later copied into bank 1 to it's correct location.&lt;br /&gt;
&lt;br /&gt;
TPA upper address is &amp;amp;F300. BIOS jump is at &amp;amp;FC00. Code after &amp;amp;FC00 is part of the BIOS in bank 1.&lt;br /&gt;
&lt;br /&gt;
====OLDCPM.COM====&lt;br /&gt;
&lt;br /&gt;
* OLDCPM.COM is much simpler than NEWCPM.COM. It restores the dormant CPM in bank 0. If NEWCPM.COM was used it remains dormant in bank 1.&lt;br /&gt;
&lt;br /&gt;
== CPM 2.2 with Silicon Disk ==&lt;br /&gt;
&lt;br /&gt;
The Silicon Disk has a command &amp;quot;|SETCPM&amp;quot; which patches CPM2.2 for the Silicon Disk.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [[File:Dkcpm.dsk]] - CPM2.2 configured for 61K TPA - This was made following instructions in the Bank software&lt;br /&gt;
* [[File:Dkplusbank.dsk]] - CPM3.0 with Dk'tronics PATCH (run BANK first) - This was made following instructions&lt;br /&gt;
* [[File:Dkplusnobank.dsk]] - CPM3.0 with Dk'tronics PATCH (BANK not required) - This was made following instructions &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Operating System]][[Category:CP/M]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=DkTronics_CPM&amp;diff=103050</id>
		<title>DkTronics CPM</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=DkTronics_CPM&amp;diff=103050"/>
				<updated>2019-03-06T11:38:13Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: /* CPM+ with Silicon Disk */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== CPM+ with Memory expansions ==&lt;br /&gt;
&lt;br /&gt;
CP/M+ already supports the Dk'Tronics RAM expansion but the CP/M+ on the system discs doesn't run on the CPC464/664 because it uses firmware v1.1 calls. Dk'Tronics provide patches to allow it to run on the 464/664.&lt;br /&gt;
&lt;br /&gt;
One version is run as follows:&lt;br /&gt;
&lt;br /&gt;
 RUN&amp;quot;BANK&lt;br /&gt;
&lt;br /&gt;
Press RETURN at the prompt. Then:&lt;br /&gt;
&lt;br /&gt;
 |EMULATE&lt;br /&gt;
 |CPM&lt;br /&gt;
&lt;br /&gt;
The disc boots, executes PATCH from PROFILE.SUB and is then ready to use.&lt;br /&gt;
&lt;br /&gt;
The other version doesn't require BANK. You only need to type:&lt;br /&gt;
 |CPM&lt;br /&gt;
&lt;br /&gt;
== CPM+ with Silicon Disk ==&lt;br /&gt;
&lt;br /&gt;
The Silicon Disk rom has a command &amp;quot;|SETCPMPLUS&amp;quot; which patches the Amstrad CP/M with support for the Silicon disk. The resulting EMS file is called CPM3SEMI.EMS.&lt;br /&gt;
&lt;br /&gt;
===Technical===&lt;br /&gt;
&lt;br /&gt;
The |SETCPMPLUS command creates a file called PATCHER.COM, which contains (at offset 689h) a table of changes to make. The changes are made blindly to the first EMS file that PATCHER.COM finds; the user is responsible for ensuring it is run on a genuine C10CPM3.EMS.&lt;br /&gt;
&lt;br /&gt;
Each change is formed:&lt;br /&gt;
&lt;br /&gt;
  DW	start	;Address of first byte to change&lt;br /&gt;
  DW	end	;Address of last byte to change&lt;br /&gt;
  DB	data	;Replacement bytes&lt;br /&gt;
&lt;br /&gt;
The addresses are as if the EMS file was loaded at 0100h.&lt;br /&gt;
====Initialisation====&lt;br /&gt;
&lt;br /&gt;
The first few changes are to the initialisation code at the start of the EMS file:&lt;br /&gt;
&lt;br /&gt;
  DW	107h	;Replace a call to 0BD19h (MC_WAIT_FLYBACK) with a&lt;br /&gt;
  DW	108h	;call to initialise the ramdisc.&lt;br /&gt;
  DW	7100h&lt;br /&gt;
&lt;br /&gt;
  DW	1C5h	;Remove the LDIR that clears memory between&lt;br /&gt;
  DW	1C6h	;0FE58h and 0FF9Fh (this has been populated by the. &lt;br /&gt;
  DW	0	;initialisation call).&lt;br /&gt;
&lt;br /&gt;
  DW	1D5h	;Place a RET at the start of the firmware version	&lt;br /&gt;
  DW	1D5h	;check, so that CP/M will run on a 464/664.&lt;br /&gt;
  DB	0C9h&lt;br /&gt;
&lt;br /&gt;
  DW	358h	;Display the Silicon Disk sign-on message.&lt;br /&gt;
  DW	359h&lt;br /&gt;
  DW	0FE80h	&lt;br /&gt;
&lt;br /&gt;
The first change sets up the call to the code that initialises the ramdisc. This code consists of 512 bytes added to the end of the EMS file; since it is not trying to fit in spare space within the existing CP/M system, it is not as constrained for memory as the other patches.&lt;br /&gt;
&lt;br /&gt;
The initialisation code copies itself to 0100h, and runs from there. The first thing it does is probe for available memory. There are two possible memory ranges: 192k (banks CC-CF, D4-D7, DC-DF) and 256k (banks E4-E7, EC-EF, F4-F7, FC-FF). The ramdisc can occupy either or both. If neither range is available, no drive is added to the system, and a minimal version of the sign-on routine (which displays no message) is constructed at 0FE80h.&lt;br /&gt;
&lt;br /&gt;
Assuming that memory was found, the DPH for the new drive is added to the drive table. The first memory bank of the ramdisc is paged in, and the system checks that the first byte of each directory entry is either 0E5h or 00h-0Fh. If it is not, the entire first bank is cleared to 0E5h. This means that the presence of CP/M disc labels or date stamps will cause the ramdisc to be erased on boot.&lt;br /&gt;
&lt;br /&gt;
The appropriate DPB for the size of ramdisc is copied to 0FF53h and the sign-on message altered to hold the correct size. The full version of the sign-on code is copied to 0FE80h.&lt;br /&gt;
&lt;br /&gt;
Finally memory from 0FF64h to 0FF9Fh is blanked and the code resumes the normal initialisation sequence by jumping to MC_WAIT_FLYBACK.&lt;br /&gt;
====Helper functions====&lt;br /&gt;
&lt;br /&gt;
After initialisation, the next two patches are helper functions, which occupy free space between CP/M modules. One is at 03E9h, in the gap between the CD and TE modules; the other at 0EE2h, in the gap at the end of DD. The first one backs up 128 bytes of memory at 8080h (which is normally used by the font) so it becomes available as a transfer buffer. The second reverses this, restoring the font.&lt;br /&gt;
Disk access&lt;br /&gt;
&lt;br /&gt;
The disk access functions follow; these are placed between 8960h and 89FFh, in memory that's probably reserved for the system message table. Since they page memory, they switch to a local stack, which grows down from 3CFEh.&lt;br /&gt;
&lt;br /&gt;
The actual I/O functions are reasonably simple. READ pages in the correct bank, copies 128 bytes to the transfer buffer at 8080h, and then uses the CP/M XMOVE and MOVE functions to copy the data to the right place. WRITE performs similar operations in reverse order; XMOVE and MOVE to get the data to 8080h, then page in the correct bank and copy the data there.&lt;br /&gt;
&lt;br /&gt;
The other two operations are LOGIN (which consists simply of&lt;br /&gt;
&lt;br /&gt;
  EX	DE, HL	;DPH is passed in DE, should be returned in HL on&lt;br /&gt;
  RET		;success&lt;br /&gt;
&lt;br /&gt;
) and FLUSH (a simple RET).&lt;br /&gt;
====Banked BIOS====&lt;br /&gt;
&lt;br /&gt;
The next few changes allocate space for the extra DPB. In a stock CPC CP/M Plus, the stack grows down from 0FF64h. In CPM3SEMI this is lowered to 0FF53h, freeing up 17 bytes for the drive DPB.&lt;br /&gt;
&lt;br /&gt;
Space also needs to be allocated for the DPH. The existing subroutine at 3FE0h is moved to 3FD0h (removing 16 apparently unused bytes) and then the new DPH occupies 3FD7h - 3FF9h.&lt;br /&gt;
&lt;br /&gt;
The new drive also requires space for an allocation vector. This is placed at 3C89h, in memory intended for patches to the BDOS.&lt;br /&gt;
&lt;br /&gt;
== CPM2.2 with Memory Expansions ==&lt;br /&gt;
&lt;br /&gt;
Dk'tronics Bank Switch software comes with NEWCPM.COM CP/M program which installs a 61K TPA CPM2.2 which uses the Dk'Tronics RAM. The documents describe how to make this CPM. They are repeated here and a pre-made dsk is linked to this page.&lt;br /&gt;
&lt;br /&gt;
===Creating the DkTronics 61K TPA CPM 2.2===&lt;br /&gt;
&lt;br /&gt;
Boot into CPM2.2 from system discs:&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;disckit2&lt;br /&gt;
&lt;br /&gt;
Use disckit2 to format a vendor disc. This will become 'Dk'Tonics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;BOOTGEN&lt;br /&gt;
This initialises the boot sector.&lt;br /&gt;
&lt;br /&gt;
Source is: CPM 2.2 disk.&lt;br /&gt;
Now insert 'Dk'tronics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 A&amp;gt;SYSGEN&lt;br /&gt;
This puts CPM2.2 onto the disc.&lt;br /&gt;
Source is CPM2.2 disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY movcpm.com&lt;br /&gt;
This puts movcpm.com onto the disk.&lt;br /&gt;
Source is 'CPM 2.2 system disc' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY save.com&lt;br /&gt;
This puts save.com onto the disk.&lt;br /&gt;
Source is 'CPM 2.2 system disc' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY newcpm.com&lt;br /&gt;
This transfers Dk'Tronics newcpm.com.&lt;br /&gt;
Source is 'Dk'Tronics bank switch software' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;FILECOPY oldcpm.com&lt;br /&gt;
This transfers Dk'Tronics oldcpm.com.&lt;br /&gt;
Source is 'Dk'Tronics bank switch software' disk.&lt;br /&gt;
Destination is 'Dk'Tronics CPM Disk' disk.&lt;br /&gt;
&lt;br /&gt;
Now boot the Dk'Tronics CPM Disk.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;MOVCPM 255 *&lt;br /&gt;
&lt;br /&gt;
This configures a 63K CPM.&lt;br /&gt;
&lt;br /&gt;
 A&amp;gt;SAVE 34 NEWCPM.SYS&lt;br /&gt;
&lt;br /&gt;
This saves a 63K CPM for Dk'Tronics CPM to use.&lt;br /&gt;
&lt;br /&gt;
Your Dk'Tronics CPM is setup.&lt;br /&gt;
&lt;br /&gt;
=== Technical ===&lt;br /&gt;
&lt;br /&gt;
* 61K TPA is not active until NEWCPM.COM is run.&lt;br /&gt;
* 61K CPM is stored in &amp;quot;NEWCPM.SYS&amp;quot; and is loaded by NEWCPM.COM&lt;br /&gt;
&lt;br /&gt;
====NEWCPM.COM====&lt;br /&gt;
* NEWCPM.COM is a normal COM file. It is loaded like a normal COM file. It resides in memory in bank 0 but configures a 61K CPM in bank 1 and transfers control to it. It remains in bank 0 and implements parts of the 61K CPM BIOS.&lt;br /&gt;
* NEWCPM.COM sets up a BIOS jumpblock in page C7 at &amp;amp;FC00. This calls into the resident NEWCPM.COM code in bank 0&lt;br /&gt;
* NEWCPM.SYS is first loaded to B00 in bank 0, it is later copied into bank 1 to it's correct location.&lt;br /&gt;
&lt;br /&gt;
TPA upper address is &amp;amp;F300. BIOS jump is at &amp;amp;FC00. Code after &amp;amp;FC00 is part of the BIOS in bank 1.&lt;br /&gt;
&lt;br /&gt;
====OLDCPM.COM====&lt;br /&gt;
&lt;br /&gt;
* OLDCPM.COM is much simpler than NEWCPM.COM. It restores the dormant CPM in bank 0. If NEWCPM.COM was used it remains dormant in bank 1.&lt;br /&gt;
&lt;br /&gt;
== CPM 2.2 with Silicon Disk ==&lt;br /&gt;
&lt;br /&gt;
The Silicon Disk has a command &amp;quot;|SETCPM&amp;quot; which patches CPM2.2 for the Silicon Disk.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [[File:Dkcpm.dsk]] - CPM2.2 configured for 61K TPA - This was made following instructions in the Bank software&lt;br /&gt;
* [[File:Dkplusbank.dsk]] - CPM3.0 with Dk'tronics PATCH (run BANK first) - This was made following instructions&lt;br /&gt;
* [[File:Dkplusnobank.dsk]] - CPM3.0 with Dk'tronics PATCH (BANK not required) - This was made following instructions &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Operating System]][[Category:CP/M]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Disc_format&amp;diff=103014</id>
		<title>Disc format</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Disc_format&amp;diff=103014"/>
				<updated>2019-02-21T16:52:27Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CPCs could read discs formatted in three separate ways. Several high-capacity disc operating systems existed to add new formats to the three standard ones.&lt;br /&gt;
&lt;br /&gt;
== Standard CPC disc formats ==&lt;br /&gt;
&lt;br /&gt;
* '''Data''': 180k single-sided. 40 tracks of nine 512-byte sectors each. Sectors numbered &amp;amp;C1 to &amp;amp;C9. 64 directory entries. Can also be read by [[PCW]]s. The useable capacity is 178k.&lt;br /&gt;
* '''System''': 180k single-sided. 40 tracks of nine 512-byte sectors each. Sectors numbered &amp;amp;41 to &amp;amp;49. 64 directory entries. Two reserved tracks containing CP/M BIOS. The useable capacity is 169k.&lt;br /&gt;
* '''IBM''': 160k single-sided. 40 tracks of eight 512-byte sectors each. Sectors numbered &amp;amp;01 to &amp;amp;08. Provided for compatibility with CP/M-86 (and DR-DOS 1.0). Used by very few CPC purchasers, but Locomotive Software stated that this was invaluable for cross-assembly. The useable capacity is 158k.&lt;br /&gt;
* '''Vendor''': Term used for System format discs with no software in the reserved tracks. The useable capacity is 169k.&lt;br /&gt;
&lt;br /&gt;
All these disc formats use a CP/M based filesystem.&lt;br /&gt;
&lt;br /&gt;
== Third-party CPC disc formats ==&lt;br /&gt;
&lt;br /&gt;
* [[FAT]] formats [http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx] (invented by MS-DOS; supported by [[SymbOS]], [[DOS Copy]], [[ReadDSK]], [[DSK-CPC]])&lt;br /&gt;
* [[MS800]] formats&lt;br /&gt;
* [[Stream2#MoDOS|Prem]] format (supported by [[Stream2]])&lt;br /&gt;
* [[RODOS]] formats&lt;br /&gt;
* [[ROMDOS]] formats (also supported by [[ParaDOS]]: D80 supported by [[S-DOS]] and [[400K/S]])&lt;br /&gt;
* [[Ultraform]]&lt;br /&gt;
* [[Vortex]] (80 tracks, 2 sides, 9 sectors of 512 bytes, 2 reserved tracks, 704 KB; supported by [[FutureOS]] and [[XD-DOS]])&lt;br /&gt;
* [[Xexor]] formats (also supported by [[ParaDOS]])&lt;br /&gt;
* [[XD-DOS]] (supports 0.7 MB Data-, System- and Vortex- formats)&lt;br /&gt;
* etc.??&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* http://www.seasip.info/Cpm/amsform.html&lt;br /&gt;
* http://www.wacci.org.uk/magazine/138/138_08.html&lt;br /&gt;
* http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]][[Category:DATA Storage]][[Category:CPC Internal Components]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_part_numbers&amp;diff=103011</id>
		<title>Amstrad part numbers</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_part_numbers&amp;diff=103011"/>
				<updated>2019-02-19T15:29:30Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Electronic Component| ]][[Category:Definitions]][[Category:Amstrad Products]][[Category:CPC Internal Components]][[Category:Hardware]][[Category:CPC History]]&lt;br /&gt;
== Custom Chips ==&lt;br /&gt;
 Part    Description&lt;br /&gt;
 40007   Gate-Array version 1 (20RA043) (uses a heat sink, same pinouts as 40008)&lt;br /&gt;
 40008   Gate-Array version 2 (HSG3130) (uses a heat sink, same pinouts as 40007)&lt;br /&gt;
 40009   32K ROM; BIOS and BASIC for CPC464 (English)&lt;br /&gt;
 40010   Gate-Array version 3 (HSG3170) (no heat sink, different pinouts than 40007 and 40008)&lt;br /&gt;
 40015   16K ROM; AMSDOS for CPC664/CPC6128 and DDI-1 disc interface&lt;br /&gt;
 40022   32K ROM; BIOS and BASIC for CPC664 (English)&lt;br /&gt;
 40025   32K ROM; BIOS and BASIC for CPC6128 (English)&lt;br /&gt;
 40026   PCW8xxx printer controller (i8041)&lt;br /&gt;
 40027   PCW8xxx/9xxx keyboard controller (i8048)&lt;br /&gt;
 40028   PCW8xxx/9xxx main ASIC&lt;br /&gt;
 40031   16L8 PAL; Ram management CPC6128&lt;br /&gt;
 40036   CPU and ROM (IC uPD7811G) (for DMP2000 Printer)&lt;br /&gt;
 40037   32K ROM; BIOS and BASIC for CPC464 and Late-CPC472-models (Spanish)&lt;br /&gt;
 40038   32K ROM; BIOS and BASIC for CPC6128 (Spanish)&lt;br /&gt;
 40039   PPC/PC2086 BUS Gate Array&lt;br /&gt;
 40040   PC1512/PPC/PC2086 memory gate array&lt;br /&gt;
 40042   PC1512 keyboard controller (i8048)&lt;br /&gt;
 40043   PC1512 BIOS (even addresses)&lt;br /&gt;
 40044   PC1512 BIOS (odd addresses)&lt;br /&gt;
 40045   PC1512 character ROM&lt;br /&gt;
 40049   PPC Serial &lt;br /&gt;
 40050   32K ROM; BIOS and BASIC for CPC464 (French)&lt;br /&gt;
 40051   32K ROM; BIOS and BASIC for CPC6128 (French)&lt;br /&gt;
 40054   Spectrum +2 ROM English&lt;br /&gt;
 40055   Spectrum +2 ROM Spanish&lt;br /&gt;
 40056   Spectrum +2 ASIC (ULA7K010E5 - main ULA)&lt;br /&gt;
 40057   Spectrum +2 ASIC (ULA1050E - Joystick)&lt;br /&gt;
 40058   Spectrum +2 ASIC&lt;br /&gt;
 40068   Spectrum +2 ROM French&lt;br /&gt;
 40077   Spectrum +2A/+2B/+3 ASIC&lt;br /&gt;
 40078   PC1512 character ROM (with Greek characters)&lt;br /&gt;
 40087   PCW9xxx printer controller ASIC&lt;br /&gt;
 40088   PCW9xxx printer serial receiver?&lt;br /&gt;
 40092   Spectrum +2A/+3 ROM A v4.0 English&lt;br /&gt;
 40093   Spectrum +2A/+3 ROM B v4.0 English&lt;br /&gt;
 40092U  Spectrum +2B ROM A v4.1 English&lt;br /&gt;
 40093U  Spectrum +2B ROM B v4.1 English&lt;br /&gt;
 40094   Spectrum +2A/+3 ROM A v4.0 Spanish&lt;br /&gt;
 40094S  Spectrum +2B ROM A v4.1 Spanish&lt;br /&gt;
 40100   PC1640 EGA ROM  &lt;br /&gt;
 40101   Spectrum +2A/+3 ROM B v4.0 Spanish&lt;br /&gt;
 40101S  Spectrum +2B ROM B v4.1 Spanish&lt;br /&gt;
 40102   PPC ?&lt;br /&gt;
 40103   PCW9xxx printer controller UPD8039 ROM. On my main board this was removed , and a UPD8039 with internal ROM is used instead.&lt;br /&gt;
 40104   PPC512 VDU/LCD Gate Array&lt;br /&gt;
 40106   PPC512 Serial&lt;br /&gt;
 40107   PPC512 BIOS (even addresses)&lt;br /&gt;
 40108   PPC512 BIOS (odd addresses)&lt;br /&gt;
 40109   PPC512 character ROM&lt;br /&gt;
 40112   PPC512 CMOS Controller&lt;br /&gt;
 40135   PPC640 modem ROM&lt;br /&gt;
 40120   PCW9xxx parallel printer controller ASIC&lt;br /&gt;
 40127   PC2086 ???&lt;br /&gt;
 40178   PC2086 keyboard controller (i8049)&lt;br /&gt;
 40179   PC2086 BIOS (even addresses)&lt;br /&gt;
 40180   PC2086 BIOS (odd addresses)&lt;br /&gt;
 40184   PC200 BIOS (even addresses)&lt;br /&gt;
 40185   PC200 BIOS (odd addresses)&lt;br /&gt;
 40186   PC2086 VGA BIOS&lt;br /&gt;
 40198   PPC512 serial ROM?&lt;br /&gt;
 40226   CPC464/CPC6128 &amp;quot;cost-down&amp;quot; ASIC (ARN4) (combines Gate Array, PAL, CRTC, and some small FDC/DRAM/RESET logic)&lt;br /&gt;
 40464   CPC+ Triple 4bit DAC (for RGB video)&lt;br /&gt;
 40489   CPC+ ASIC&lt;br /&gt;
 40908   CPC+ cartridge protection chip (&amp;quot;ACID&amp;quot;)&lt;br /&gt;
 41088-1 CPC+ 27C1001 EPROM in GX 4000 version of [[Burnin' Rubber]] (130Z001)&lt;br /&gt;
 41090-1 CPC+ 27C1001 EPROM in French System Cartridge (CPC+ BIOS/BASIC, AMSDOS v2, Burnin' Rubber) (130Z001)&lt;br /&gt;
 41091-1 CPC+ 27C1001 EPROM in Spanish System Cartridge (CPC+ BIOS/BASIC, AMSDOS v2, Burnin' Rubber) (130Z001)&lt;br /&gt;
 41857   PenPad 600 ?&lt;br /&gt;
 41863   PenPad 600 ?&lt;br /&gt;
 41864   PenPad 600 ?&lt;br /&gt;
 41898   NC200 ASIC&lt;br /&gt;
 42069   PenPad 600 ROM&lt;br /&gt;
 42112   NC200 System ROM (UK)&lt;br /&gt;
 42778   PcW16 &amp;quot;Anne&amp;quot; ASIC&lt;br /&gt;
&lt;br /&gt;
* PT NO 31600  ASIC for DMP3160 printer (combines TTL logic from earlier DMP's in one SMD chip) (the chip hides on solder side of the PCB)&lt;br /&gt;
* 40092U, 40093U are bug-fixed versions of 40092 and 40093&lt;br /&gt;
* 40094S, 40101S are bug-fixed versions of 40094 and 40101&lt;br /&gt;
&lt;br /&gt;
Part numbers 40092-40094 and 40101 provided and confirmed by Guesser from WOS.&lt;br /&gt;
&lt;br /&gt;
== PCBs ==&lt;br /&gt;
 Part    Description&lt;br /&gt;
 30001   P.C.B. 3&amp;quot; Disc drive&lt;br /&gt;
 30002   P.C.B. 3&amp;quot; Disc drive&lt;br /&gt;
 270100  P.C.B. CPC464 version 1 (one variant) (1983)&lt;br /&gt;
 Z70100  P.C.B. CPC464 version 1 (another variant) (1983)&lt;br /&gt;
 Z70101  P.C.B. CPC464 version 1 keyboard with soldered wires&lt;br /&gt;
 Z70102  P.C.B. CPC464 version 1 keyboard with 20 pin connector (only 19 pins used)&lt;br /&gt;
 Z70102  P.C.B. CPC464 cassette sub-board (This pcb share part number with the keyboard assembly !)&lt;br /&gt;
 Z70200  P.C.B. CPC464 version 2&lt;br /&gt;
 Z70205  P.C.B. CPC664 &lt;br /&gt;
 Z70209  CPC664 Keyboard Assembly (English)&lt;br /&gt;
 Z70210  P.C.B. CPC6128 version 1 (1985)&lt;br /&gt;
 Z70211  CPC464 Keyboard Assembly (English) (ribbon cable connectors)&lt;br /&gt;
 Z70215  P.C.B. CTM644 colour monitor main&lt;br /&gt;
 Z70216  P.C.B. CTM644 colour monitor brightness control&lt;br /&gt;
 Z70217  P.C.B. CTM644 colour monitor cathode ray tube&lt;br /&gt;
 Z70221  CPC6128 Keyboard Assembly (English) (ribbon cable connectors)&lt;br /&gt;
 Z70290  P.C.B. CPC6128 version 2, MC0020x (1985) (one variant)&lt;br /&gt;
 Z70290  P.C.B. CPC6128 version 2, MC0023x (1985) (german variant)&lt;br /&gt;
 Z70291  P.C.B. PCW8256/8512 (1985)&lt;br /&gt;
 Z70311  CPC6128 Keyboard Assembly (French) (ribbon cable connectors)&lt;br /&gt;
 Z70312  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70313  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70341  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70374  P.C.B. CPC464 version 3 (one variant)&lt;br /&gt;
 Z70375  P.C.B. CPC464 version 3 (another variant)&lt;br /&gt;
 Z70378  P.C.B. CPC464 version 3 (german variant)&lt;br /&gt;
 Z70500  P.C.B. Spectrum+2 issue 3&lt;br /&gt;
 Z70501  Spectrum +2 Datacorder PCB (full part number Z70501/C3-4494(A) )&lt;br /&gt;
 Z70800  P.C.B. PCW9512 (1987)&lt;br /&gt;
 Z70830  Spectrum +2A/+3 Motherboard (ISSUE 1 &amp;amp; 2 both (c) 1987)&lt;br /&gt;
 Z70833  Spectrum +2B Motherboard (ISSUE 1 &amp;amp; 2 (c) 1988, ISSUE 4 (c) 1990)&lt;br /&gt;
 Z70835  Spectrum +3B Motherboard (ISSUE 1 (C)1988 )&lt;br /&gt;
 Z70901  PC2086 motherboard (c) 1988&lt;br /&gt;
 Z80264  P.C.B. 3&amp;quot; disc drive&lt;br /&gt;
 Z80329  P.C.B. CPC464 version 4 (1988)&lt;br /&gt;
 Z80330  P.C.B. CPC6128 version 3 (1988)&lt;br /&gt;
 Z80432  464+ Keyboard Assembly&lt;br /&gt;
&lt;br /&gt;
 Z90903          P.C.B. CPC+ Cartridge (custom LKs) (1990)&lt;br /&gt;
 2700-016P-3     P.C.B. 464+/6128+ Mainboard (1990)&lt;br /&gt;
 2700-017P-4     P.C.B. GX4000 Mainboard (1990)&lt;br /&gt;
 2700-023P-1     P.C.B. CPC+ Cartridge (hardwired LKs) (1990)&lt;br /&gt;
 PCB101/MF0004B  P.C.B. DDI-1 Interface&lt;br /&gt;
 PCB501/MF0003B  P.C.B. FD-1 Power Supply (AC)&lt;br /&gt;
 PCB502/MF0001A  P.C.B. FD-1 Power Supply (DC)&lt;br /&gt;
 PCB504/MF0002A  P.C.B. FD-1 Relay Board&lt;br /&gt;
 MS0043A         P.C.B. CPC472 Daughterboard&lt;br /&gt;
 112C4001-3160   P.C.B. DMP3160 Printer, VER. 04 (C) 1988 (0AMS0100 PSP0151B)&lt;br /&gt;
 C3-4522/GEM-194HB       Spectrum +2A/+2B Datacorder PCB&lt;br /&gt;
&lt;br /&gt;
Note that some numbers start with '''27''' instead of '''Z7''' (the boards are really labeled like so, this is not a typo).&lt;br /&gt;
&lt;br /&gt;
Information about Spectrum PCBs provided by Guesser of WOS.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Amsoft SOFT Numbers]]&lt;br /&gt;
* [[Mainboard Versions]]&lt;br /&gt;
&lt;br /&gt;
Contributors: Gérald Vincent&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_part_numbers&amp;diff=53097</id>
		<title>Amstrad part numbers</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=Amstrad_part_numbers&amp;diff=53097"/>
				<updated>2010-08-22T16:18:19Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Custom Chips ==&lt;br /&gt;
 Part    Description&lt;br /&gt;
 40007   Gate-Array version 1 (20RA043) (used in CPC464; with heat sink, other pin-outs than 40008/40010)&lt;br /&gt;
 40008   Gate-Array version 2 (HSG3130) (rare version) (same pin-outs as 40010)&lt;br /&gt;
 40009   32K ROM; BIOS and BASIC for CPC464 (English)&lt;br /&gt;
 40010   Gate-Array version 3 (HSG3170) (used in newer CPC464 and in CPC664/6128; no heat sink)&lt;br /&gt;
 40015   16K ROM; AMSDOS for CPC664/CPC6128 and DDI-1 disc interface&lt;br /&gt;
 40022   32K ROM; BIOS and BASIC for CPC664 (English)&lt;br /&gt;
 40025   32K ROM; BIOS and BASIC for CPC6128 (English)&lt;br /&gt;
 40026   PCW8xxx printer controller (i8041)&lt;br /&gt;
 40027   PCW8xxx/9xxx keyboard controller (i8048)&lt;br /&gt;
 40028   PCW8xxx/9xxx main ASIC&lt;br /&gt;
 40031   16L8 PAL; Ram management CPC6128&lt;br /&gt;
 40036   CPU and ROM (IC UOD7811G) (for DMP2000 Printer)&lt;br /&gt;
 40037   32K ROM; BIOS and BASIC for CPC464 and Late-CPC472-models (Spanish)&lt;br /&gt;
 40038   32K ROM; BIOS and BASIC for CPC6128 (Spanish)&lt;br /&gt;
 40040   PC1512 memory gate array&lt;br /&gt;
 40042   PC1512 keyboard controller (i8048)&lt;br /&gt;
 40043   PC1512 BIOS (even addresses)&lt;br /&gt;
 40044   PC1512 BIOS (odd addresses)&lt;br /&gt;
 40045   PC1512 character ROM&lt;br /&gt;
 40050   32K ROM; BIOS and BASIC for CPC464 (French)&lt;br /&gt;
 40051   32K ROM; BIOS and BASIC for CPC6128 (French)&lt;br /&gt;
 40054   32K ROM; Spectrum +2&lt;br /&gt;
 40058   Spectrum +2 ASIC&lt;br /&gt;
 40077   Spectrum +3 ASIC&lt;br /&gt;
 40078   PC1512 character ROM (with Greek characters)&lt;br /&gt;
 40087   PCW9xxx printer controller ASIC&lt;br /&gt;
 40092   Spectrum +3 ROM 1 (English)&lt;br /&gt;
 40093   Spectrum +3 ROM 2 (English)&lt;br /&gt;
 40100   PC1640 EGA ROM&lt;br /&gt;
 40107   PPC512 BIOS (even addresses)&lt;br /&gt;
 40108   PPC512 BIOS (odd addresses)&lt;br /&gt;
 40109   PPC512 character ROM&lt;br /&gt;
 40112   PPC512 keyboard controller&lt;br /&gt;
 40120   PCW9xxx parallel printer controller ASIC&lt;br /&gt;
 40178   PC2086 keyboard controller (i8049)&lt;br /&gt;
 40179   PC2086 BIOS (even addresses)&lt;br /&gt;
 40180   PC2086 BIOS (odd addresses)&lt;br /&gt;
 40184   PC200 BIOS (even addresses)&lt;br /&gt;
 40185   PC200 BIOS (odd addresses)&lt;br /&gt;
 40186   PC2086 VGA BIOS&lt;br /&gt;
 40226   CPC464/CPC6128 &amp;quot;cost-down&amp;quot; ASIC (ARN4) (combines Gate Array, PAL, CRTC, and some small FDC/DRAM/RESET logic)&lt;br /&gt;
 40464   CPC+ Triple 4bit DAC (for RGB video)&lt;br /&gt;
 40489   CPC+ ASIC&lt;br /&gt;
 40908   CPC+ cartridge protection chip (&amp;quot;ACID&amp;quot;)&lt;br /&gt;
 41088-1 CPC+ 27C1001 EPROM in GX 4000 version of [[Burnin' Rubber]] (130Z001)&lt;br /&gt;
 41090-1 CPC+ 27C1001 EPROM in French System Cartridge (CPC+ BIOS/BASIC, AMSDOS v2, Burnin' Rubber) (130Z001)&lt;br /&gt;
 41091-1 CPC+ 27C1001 EPROM in Spanish System Cartridge (CPC+ BIOS/BASIC, AMSDOS v2, Burnin' Rubber) (130Z001)&lt;br /&gt;
&lt;br /&gt;
== PCBs ==&lt;br /&gt;
 Part    Description&lt;br /&gt;
 30001   P.C.B. 3&amp;quot; Disc drive&lt;br /&gt;
 30002   P.C.B. 3&amp;quot; Disc drive&lt;br /&gt;
 270100  P.C.B. CPC464 version 1 (one variant) (1983)&lt;br /&gt;
 Z70100  P.C.B. CPC464 version 1 (another variant) (1983)&lt;br /&gt;
 Z70101  P.C.B. CPC464 version 1 keyboard with soldered wires&lt;br /&gt;
 Z70102  P.C.B. CPC464 version 1 keyboard with 20 pin connector (only 19 pins used)&lt;br /&gt;
 Z70102  P.C.B. CPC464 cassette sub-board (This pcb share part number with the keyboard assembly !)&lt;br /&gt;
 Z70200  P.C.B. CPC464 version 2&lt;br /&gt;
 Z70205  P.C.B. CPC664 &lt;br /&gt;
 Z70210  P.C.B. CPC6128 version 1 (1985)&lt;br /&gt;
 Z70211  CPC464 Keyboard Assembly (English) (ribbon cable connectors)&lt;br /&gt;
 Z70215  P.C.B. CTM644 colour monitor main&lt;br /&gt;
 Z70216  P.C.B. CTM644 colour monitor brightness control&lt;br /&gt;
 Z70217  P.C.B. CTM644 colour monitor cathode ray tube&lt;br /&gt;
 Z70221  CPC6128 Keyboard Assembly (English) (ribbon cable connectors)&lt;br /&gt;
 Z70290  P.C.B. CPC6128 version 2, MC0020x (1985) (one variant)&lt;br /&gt;
 Z70290  P.C.B. CPC6128 version 2, MC0023x (1985) (german variant)&lt;br /&gt;
 Z70291  P.C.B. PCW8256/8512 (1985)&lt;br /&gt;
 Z70311  CPC6128 Keyboard Assembly (French) (ribbon cable connectors)&lt;br /&gt;
 Z70312  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70313  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70341  P.C.B. 3&amp;quot; Disc Drive&lt;br /&gt;
 Z70374  P.C.B. CPC464 version 3 (one variant)&lt;br /&gt;
 Z70375  P.C.B. CPC464 version 3 (another variant)&lt;br /&gt;
 Z70378  P.C.B. CPC464 version 3 (german variant)&lt;br /&gt;
 Z70500  P.C.B. Spectrum+2 issue 3&lt;br /&gt;
 Z70800  P.C.B. PCW9512 (1987)&lt;br /&gt;
 Z70830  P.C.B. Spectrum+3 issue 2 (1987)&lt;br /&gt;
 Z70833  P.C.B. Spectrum+2 issue 4&lt;br /&gt;
 Z80264  P.C.B. 3&amp;quot; disc drive&lt;br /&gt;
 Z80329  P.C.B. CPC464 version 4 (1988)&lt;br /&gt;
 Z80330  P.C.B. CPC6128 version 3 (1988)&lt;br /&gt;
 Z90903          P.C.B. CPC+ Cartridge (custom LKs) (1990)&lt;br /&gt;
 2700-016P-3     P.C.B. 464+/6128+ Mainboard (1990)&lt;br /&gt;
 2700-017P-4     P.C.B. GX4000 Mainboard (1990)&lt;br /&gt;
 2700-023P-1     P.C.B. CPC+ Cartridge (hardwired LKs) (1990)&lt;br /&gt;
 PCB101/MF0004B  P.C.B. DDI-1 Interface&lt;br /&gt;
 PCB501/MF0003B  P.C.B. FD-1 Power Supply (AC)&lt;br /&gt;
 PCB502/MF0001A  P.C.B. FD-1 Power Supply (DC)&lt;br /&gt;
 PCB504/MF0002A  P.C.B. FD-1 Relay Board&lt;br /&gt;
 MS0043A         P.C.B. CPC472 Daughterboard&lt;br /&gt;
Note that some numbers start with '''27''' instead of '''Z7''' (the boards are really labeled like so, this is not a typo).&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Mainboard Versions]]&lt;br /&gt;
&lt;br /&gt;
Contributors: Gérald Vincent&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	<entry>
		<id>https://oldwiki.cpcwiki.eu/index.php?title=PCW&amp;diff=53091</id>
		<title>PCW</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.cpcwiki.eu/index.php?title=PCW&amp;diff=53091"/>
				<updated>2010-08-22T15:02:51Z</updated>
		
		<summary type="html">&lt;p&gt;JohnElliott: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:pcw8256.jpg|thumb|The Amstrad PCW8256 - The first PCW computer]]&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;PCW&amp;lt;/b&amp;gt; (&amp;lt;b&amp;gt;P&amp;lt;/b&amp;gt;ersonal &amp;lt;b&amp;gt;C&amp;lt;/b&amp;gt;omputer for &amp;lt;b&amp;gt;W&amp;lt;/b&amp;gt;riting) was another Amstrad computer. In Germany it's better known by its codename &amp;lt;b&amp;gt;Joyce&amp;lt;/b&amp;gt;, which Schneider chose to keep for the final product.&lt;br /&gt;
&lt;br /&gt;
The codename was the name of Alan M. Sugar's secretary.&lt;br /&gt;
&lt;br /&gt;
The PCW was the Amstrad computer in production for the longest time(1985 - 1996). And the Amstrad computer with the most model revisions (Starting with the PCW8256 and ending with the PCW16). All models was based on the Z80 CPU.&lt;br /&gt;
&lt;br /&gt;
The PCW was in some ways similar to the CPC range, but also different in many ways.&lt;br /&gt;
&lt;br /&gt;
== Similarities to the CPC ==&lt;br /&gt;
&lt;br /&gt;
* Complete out-of-the-box system:&lt;br /&gt;
** central unit&lt;br /&gt;
** keyboard&lt;br /&gt;
** monitor&lt;br /&gt;
** disk drive&lt;br /&gt;
* Z80 CPU&lt;br /&gt;
* CP/M Plus operating system&lt;br /&gt;
&lt;br /&gt;
== Differences to the CPC ==&lt;br /&gt;
* No sophisticated sound chip (Beeper only)&lt;br /&gt;
* Joystick support through 3rd party extensions only (the keyboard controller includes support for two joysticks, as on the CPC, but no keyboard using this was ever built).&lt;br /&gt;
* No AMSDOS or other DOS in ROM, only a bootloader for CP/M&lt;br /&gt;
* No support for tape recorders&lt;br /&gt;
&lt;br /&gt;
The PCW was designed as a (back then) professional computing system. This was underlined by the built-in green monitor (no support for colour monitors at all), the bundling with a printer and a word-processing software and bigger RAM (256k or 512k).&lt;br /&gt;
Although the name might suggest it, the PCW was more than just a word-processing system. Unlike some other similar word-processing systems of its time, it came with a normal operating system, CP/M, and could run any software for this system, like spreadsheets, databases and so on.&lt;br /&gt;
The PCW had its biggest success in the UK, where it is even used up to today in some branches, e.g. small hotels.&lt;br /&gt;
In Germany, Schneider mainly marketed it as word-processing system, not outlining its usability for other purposes, so that professional users decided for IBM compatible PCs.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
TV-Commercial for the PCW (Spanish)&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|Vs4efMnLWVE|200}}&lt;br /&gt;
&lt;br /&gt;
A PCW512 booting&lt;br /&gt;
&lt;br /&gt;
{{#ev:youtube|N28JP5oYCyo|200}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Amstrad_PCW PCW in the Wikipedia]&lt;br /&gt;
* [http://www.fvempel.nl/ PCW Joyce Computer Club (Dutch)]&lt;br /&gt;
* [http://www.joyce.de Joyce User AG e.V. (German)]&lt;br /&gt;
&lt;br /&gt;
[[Category:Video contents]][[Category:Non CPC Computers]][[Category:Amstrad Products]]&lt;/div&gt;</summary>
		<author><name>JohnElliott</name></author>	</entry>

	</feed>