Jednotlivé časti CP/M netreba popisovať, na internete existuje množstvo informácií k tejto problematike.
Výnimku tvorí BIOS, ktorý je pre každý typ počítača ušitý na mieru.
BIOS tvoria tri hlavné celky:
- zobrazenie znakov
- vstup klávesnice
- diskové rutiny a spolupráca s OndraSD
Ostatné časti, ako napr. tlač na tlačiareň sú vcelku jednoduché a v zásade sa nelíšia od iných implmentácií.
Zobrazenie je 80 znakov na riadok, 25+2 riadky. Font je 4x8 pixelov. Matrice znakov sú uložené tak, že sú v jednej matrici dva znaky, čím sa šetrí miesto. BIOS emuluje terminál VT-52, teda aspoň jeho väčšiu časť týkajúcu sa umiestňovania znakov na obrazovke. Ako bonus bol pridaný dolný stavový riadok informujúci o stave systému. Zobrazovací režim je upravený na 27 riadkov, aby bol šetrený výkon počítača.
Klávesnica má rozsiahlu obslužnú rutinu, ktorá rieši prepínanie funkcií všetkými piatimi prepínacími klávesami (Symbol, Caps, Num, ČS*, CTRL). Ďalej rieši opakovanie znakov pri dlhšom stlačení klávesy a niekoľko špeciálnych funkcií.
/* československá znaková sada zatiaľ nebola implementovaná
Pre diskové operácie sa využívajú low-level operácie podporované perifériou OndraSD (block-read a block-write).
Veľkosť CP/M bloku je určená na 4096 bytov, emuluje sa diskové médium s 8192 stopami a štyrmi sektormi. Celková veľkosť disku je 4MB, implementovaných je 6 virtuálnych diskov. Pri tejto veľkosti má alokačný vektor dĺžku 128 bajtov. Každá stopa je mapovaná na jeden blok na SD karte (512 b), sektor (128 b) je len logická časť bloku. Keďže veľkosť CP/M bloku a SD bloku je rôzna, nemohol byť využitý originálny deblocking algortimus, ale bol vytvorený alternatívny, ktorého úlohou je ukladať celý blok (512 b) z SD karty do pamäte, ako aj následne po jeho modifikácii ho uložiť späť na SD kartu. Mierne bol upravený aj firmvér OndraSD, aby potvrdzoval úspešné zapísanie bloku na SD kartu. Dáta sa na SD kartu zapisujú dosť netypickým spôsobom. Pre rôzne obmedzenia bol zvolený RAW zápis do vyhradenej časti SD karty, do partície vytvorenej na tento účel. 8-bitové CP/M majú rezervovaný kód partície 52h, tento však nie je formalizovaný, takže je použitý vlastný formát. Správnemu vytvoreniu partície treba venovať primeranú pozornosť.
Studený štart okrem úvodného hlásenia nastaví východzí disk a pár premenných systému, ďalej pokračuje rovnako ako teplý štart.
Teplý štart nastavuje väčšinu systémových premenných, zapíše vektory volaní pre BDOS a nastaví IOBYTE. Avšak ako celkom prvé skontroluje kompletnosť CCP pomocou kontrolných súčtov. Ak je CCP narušený (prepísaný predtým spusteným programom), je opäť načítaný z SD karty. CCP je uložený na SD karte ako obyčajný súbor, teda nie na CP/M partícii, ako bolo zvykom v minulosti. Vzhľadom na limity pamäte RAM nemôže byť (i napriek svojej veľkosti 2kB) ani niekde uložený pre následné použitie, ako to bolo napr. pri počítači ZX Spectrum (tam bol uložený v odstránkovanej RAM 16kB).
Načítanie je pri veľkosti 2kB veľmi rýchle a nespôsobuje zdržanie. Ak došlo k čítaniu CCP, zobrazí sa výpis Reloading CCP, ak sa tento nápis neobjaví, došlo k recyklácii pôvodného CCP.
Pozn.: v zdrojovom kóde disasemblovaného CCP je na konci uvedená otázka, prečo sa porovnávajú dve vzorky šiestich bajtov PATTERN. Prakticky bolo zistené, že ak nejaký program prepíše CCP, je pravdepodobné, že prepíše aj posledných 6 bajtov CCP (pravdepodobne tam bude práve STACK), a keďže sa pri štarte CCP tieto vzorky porovnajú a tým že nesedia, dôjde k vykonaniu dvoch inštrukcií DI, HALT. To malo pravdepodobne zabrániť neželanému správaniu počítača (v najhoršom prípade prepísaniu dát na disku) pri narušení celistvosti CCP.
Launcher je časť kódu umiestnený mimo BIOS, fyzicky ešte pred CCP, ktorá kontroluje prostredie a pripraví všetko pre štart CP/M. Následne je táto časť nepotrebná a môže byť prepísaná inými programami, aj to bol dôvod, prečo nie je súčasťou BIOSu. Launcher kontroluje verziu firmvéru OndraSD, existenciu CP/M partície, prípadne funkčnosť RTC.
Migration utility slúži na import súborov z SD karty na CP/M partíciu. Veľkosť súborov nesmie prekročiť hranicu, po ktorej by už došlo k prepísaniu samotnej utility, maximálna veľkosť súborov by nemala presiahnuť 42kB.
Veľkosť BIOSu je necelých 5,5 kB, zaberá priestor od BE00h po takmer D700h. V tejto veľkosti je už zahrnutá cache na čítanie celého bloku z SD, ako aj alokačné vektory všetkých diskov.
Štruktúra pamäte RAM pre CP/M: