CP/M je skraćenica engleske složenice Control Program for Microcomputers i ime je za operacijski sustav kojeg je bila razvila američka tvrtka Digital Research. CP/M je bio jako raširen u kasnim 70-im i 80-im godinama 20. stoljeća. CP/M je bio je prvi proglašen industrijskim standardom za operacijske sustave.
Arhitektura
CP/M-ova osnovna inovacija bilo je rasčlanjivanje operacijskog sustava na četiri osnovna funkcijska dijela:
CPP (CP/M) (naredbeni preradnik) - ASCII zaslon BDOS (basic disk operating system - osnovni operacijski sustav za diskove i datoteke) BIOS (Basic I/O system - osnovni sustav za ulazno/izlazne jedinice) TPA (transient program area) - tranzitivno programsko područje je mjesto koje drži programme koji su učitani od strane CPP-a
Rastavljanjem CP/M na četiri osnovne abstrakcije omogućilo je da se CP/M proširi na mnoga računala; tvorci novog računarskog sistema nisu više trebali više razviti novi operacijski sustav, već su samo trebali napisati BIOS, dok su ostale dvije komponente CPP i BDOS samo je bilo potrebno ponovno prevesti s programom-prevodiocem. Ideje iz CP/M-a poslužile su za razvoj operacijskog sustava 86-DOS koji je kasnije postao Microsoft MS-DOS.
CP/M bio je jednostavan i učinkovit sistem koji nije zahtijevao mnogo od resursa nekog sistema. Bez BIOSa koji je bio različit na svakom stroju, ostale komponente kao zauzimale su: BDOS 3.584 bajta memorije, dok je CPP oduzimao 2.048 bajta radne memorije. CP/M je za BIOS imao određeno 3.584 bajta memorije, cijeli CP/M uzevši u obzir u nultu stranicu stajao bi unutar 9.316 bajta, što je relatvno malo s obizrom na dužnosti koje je operacijski sustav mogao obavljati.
Naredbeni preradnik ili CPP
Zadatak naredbenog preradnika (komandnog processora) (engleski: Console Command Processor, ili CCP) bilo je čitanje pritisnutih s tipkovnice ii pisanje inih na zaslon terminal. U isto vrijeme kada je čitao pritisnute tipke s tipkovnice i prenosio je rezultate tog čitanja prema izlaznoj jedinici, uspjevao je i pretvarati te pritisnute znakove u naredbe, ako bi one bile tako utipkane. Kod pokretanja operacijskog sustava, konzola bi prikazala sljedeći upit na zaslonu:
A>
Iza toga upita stajalo bi obično trepereći pokazivač koji je bio znak korisniku ili korisnici sistema da je operacijski sustav spreman da primi naredbu ili ulaz od korisnika sistema. Znakovi A> označavalo je trenutnu radnu jedinicu ili disk. Ako je neki system imao više jedinica prebacivanje na tu jedinicu ili disk vršio bi se pisanjem imena diska npr. ako bi korisnik upisao B: i poslije toga pritisnuli tipku za novi red (Enter, ili Return, Novi red) tada bi Sistemi koji su imali više jedinica, tada bi se ispis na lijevoj strain zaslona promijenio u B>, i svaka nova naredbena linija počela bi s B>
Dizajn naredbenog sučelja CP/Ma i način rada bio je sličan operacijskim sistemima koja su tada bila popularna na miniračunalima kao kao RT-11 za DEC PDP-11 ili OS/8 za DEC PDP-8, i koja su kasnije nasljeđena u operacijskim sustavima kao UNIX ili MS-DOS.
Naredbe
Narebe nisu bile osjetljive s obzirom na malo ili veliko slovo.
NaredbaUporaba DIR DIR <filespec> ERA ERA <filespec> REN REN <filespec1>=<filespec2> SAVE SAVE <mem stranice> <datoteka> mem-strance su broj 256 bajtnih stranica po USER USER <korisnik> korisnik je broj od 0 do 15
BDOS Za opširniji članak pogledaj članak: BDOS
BDOS je sadržavao 40 osnovnih funkcija koje su rabili korisnički programi, i koje su rabili ostali dijelovi operacijskog sistema za pristup resorsima sistema kao disketne jedinice, serijski međusklopovi, zaslon i slično. Funkcije su bile dostupne preko sistemskih poziva koje su bili pokazivači u memoriji računala koji je držao BDOS preko kojih su izvršavane podrutine. Nakon izvršavanja ovih podrutina, BDOS bi se vratio nazad u program koji je pozvao njegovo izvršavanje. BDOSova svrha je bila u stvari standardna ulazno izlazna biblioteka podrutina za sve CP/M programe.
Logičke jedinice
U CP/M u postoje četiri logičke jedinice koje su jedino dostupne aplikacijskim programima. One su
ImeOpaska CON Konzola, rabi se za čitanje tipkovnice i pisanja na zaslon LST Logički pisač RDR Logička jedinica za čitanje s diskete ili krutog diska PUN Logička jedinica za zapisivanje na disketu ili kruti disk
Programi nisu imali izravni pristup ulazno izlaznim jedinicama već su trebale rabiti CP/Mov API. Primjerice ako je program trebao uzeti upit od korisnika preko tipkovnice, program je trebao koristiti logičku jedinicu CON, dok za ispis se rabio LST. Programi su mogli skrenuti izlaz za LST na CON, i tako je bilo moguće raditi preinake prije nego što se izlaz preusmjerio na fizički pisač.
BIOS
Opširniji članak: BIOS
BIOS je strojno ovisni dio operacijskog sustava koji je bio uveden kao novina kroz CP/M, i vrsta je abstrakcije koja je bila vrlo važna za razvoj računarstva. Ideja oko BIOSa bila je unikatna u tome što za svaki stroj je bilo potrebno samo promijeniti BIOS i CP/M bi trebao raditi na ciljnom stroju. U BIOSu su se nalazile sve rutine koje su vezale strojevni dio s operacijskim sustavom: tipkovnica, zaslon, disketne jedinice, ostale ulazno/izlazne jedinice, tvrdi diskovi i slično. BIOS je obično započinjao sa skokovima na razne potprograme, i program za BIOS za inačicu CP/M v1.3 izgledao je ovako: JMP BOOT ;-3: Potprogram za hladni start JMP WBOOT ; 0: Potprogram za topli start JMP CONST ; 3: Status konzole JMP CONIN ; 6: Ulaz konzole JMP CONOUT ; 9: Izlaz konzole JMP LIST ;12: Izlaz za pisač JMP PUNCH ;15: Izlaz za bušenu vrpcu JMP READER ;18: Ulaz za bušenu vrpcu JMP HOME ;21: Pomakni glavu diskete na nultu liniju JMP SELDSK ;24: Izaberi disketnu jedinicu JMP SETTRK ;27: Postavi broj linije JMP SETSEC ;30: Postavi broj sektora JMP SETDMA ;33: Postavi adresu za DMA Set DMA address JMP READ ;36: Čitaj sektor JMP WRITE ;39: Piši sector
TPA Sklopovni model
Da bi se mogao shvatiti organizacija i arhitektura CP/M-a potrebno je uzeti u obzir minimalnu odnosno osnovnu konfiguraciju koja je bila dostadna da bi operacijski sustav mogao pokrenuti. Tokom 70-tih za minimalni 8-bitni CP/M sustav bilo je potrebno imati sljedeće komponente:
Terminal koji radi s ASCII zakovima Mikropreradnik Intel 8080 Najmanje 16 KB osnovne memorije (glavne memorije) Način pokretanja računala s prvog sektora disketne jedinice Jednu disketnu jedinicu
Jedini sklopovni sustav za CP/M koje je podržavala tvrtka Digital Research took 1970-tih bili su sistemi koji su rabili mikropreradnik Intel 8080. Sve druge tvrtke koje su proizvodile CP/M kompatibilne sustave za druge mikroprocesore trebale su same mijenjati i napisati sami dijelove CP/M operacijskog sustava za taj mikroprocesor i također su trebali napisati programsku podršku za sve drugo sklopovlje koje su htjeli rabiti. Iako ovo zvuči kao preobiman zadatak, Digital Research jer posao prepravljanja olakšao zbog toga što je CP/M imao tri osnovne abstrakcije: CPP, BDOS, i BIOS od kojih su CPP i BDOS bili dijelovi koje nije bilo trebalo toliko prepravljati i većinu promjena za tvrtke koje su proizvodile CP/M kompatibilna računala događala u BIOS-u, tj. u programima koji su imali izravni dodir sa sklopovljem. Digital Research je također pružala pomoć onim tvrtkama koje su trebale napisati svoj BIOS uz naplatu. Zbog relativne kompatibilnosti mikropreadnika Zilog Z80 s Intelovim 8080, prebacivanje CP/M-a bilo je jednostavno isto zbog toga što tvrtka Digital Research u izvornom kodu jezgre (BDOS, CCP, osnovne transientne naredbe) nije sadržavao nikakve naredbe koje su bile osobite za Z80.
Grafika
U prvotnim inačicama CP/M-a grafičke sposobnosti nisu bile visoko na listi, pa je u prvotnim inačicama potpora je bila prisutna samo za znakovni mod. Isto tako u kasnim 70-tim nije bilo puno tvrtki koje su proizvodile proširenja za CP/M sisteme. Tek u 80-tim dolazi do pojave podrške grafike u CP/M i to preko biblioteke rutina i programa koja se skupno zvala Graphical Environment Manager odnosno skraćeno GEM.
Memorijska karta
Kao standard za CP/M Digital Research je imao sljedeću standardnu memorijsku kartu
Heks AdresaSadržaj $F200-$FFFF BIOS $E400-$F1FF BDOS $DC00-$E3FF CCP $0100-$DBFF TPA ili memorija za programe $0000-$00FF Nulta stranica
Za mnoge sisteme osnovni program za pokretanje stroja bio je sadržan u sistemskom ROMu, jer primjerice Intel 8080 zahtjeva da program započne na adresi 0, dok recimo CP/M ima zahtjev da RAM započinje od lokacije 0. Za strarije strojeve, pokretanje stroja se vršilo ručno preko konzole s raznim tipkama preko kojih se ručno ubacivale naredbe za pokretanje.
Nulta stranica
U 8-bitnim CP/M sistemima nulta stranica je zauzimala privih 265 bajta memorije stroja. Ovaj dio memorije rabio se za komunikaciju u operacijskom sistemu.
Heks AdresaŠirina (bajtovi)Opaska $00-$02 3 Sadrži narebu za skok na BIOS obično kod za JMP (1 bajt) i prvu adresu BIOSa $F400(2 bajta) $03 1 Bajt za ulaz izlaz, rabio se s ponovno raspoređivanje priključenih uređaja $04 1 Bajt koji u prva donja četiri bita sadrži broj aktivne disketne jedinice (maks 16, raspon 0 do 15), i u 4 gornja bita broj aktivnog korisnika (maks 16, raspon 0 do 15) $05-$07 2 Naredba na skok na prvu adresu BDOSa JMP $E400 $08-$3A 51 Vektori za pononvo pokretanje i za prekide koje rabi mikropreradnik $3B-$4F 15 Rezervirano $50 1 Disketna jedinica s koje se učitao CP/M rabi se za inačicu v3.0 $51-$52 2 Adresa za lozinku za prvi FCB (upravni blok datoteke) (CP/M v3.0) $53 1 Dužina lozinke za prvi FCB (CP/M v3.0) $54-$55 1 Adresa za lozinku za drugi FCB (CP/M v3.0) $56 1 Dužina lozinke za drugi FCB (CP/M v3.0) $57-$5B 5 Rezervirano $5C-$6B 16 Rabi se za FCB 1 $6C-$7F 19 Rabi se za FCB 2 (prebrisan ako je FCB 1 otvoren) $80 1 Broj znakova koji čekaju u naredbenom repu $81-$FF 1 Naredbeni rep, svi znakovi iza imena programa
Datotečni sustav
Po današnjim standardima (2016.) CP/M datotečni sustav bio je ograničen i bio je odraz tehnologije kasnih 70-tih i ranih 80-tih godina. U prvoj inačici CP/M je podržavao je diskove čiji obujam nije mogao preći preko 8 Mb. Kasnije inačice omogućavale su podršku za veće diskove. CP/M imao je za to vrijeme genijalan sistem čuvanja resorsa na disketama; tako je primjerice prilikom učitavanja diskete, nakon što učita direktorij počinje izračunavati broj slobodnih blokova na nekoj disketi, i kao rezutat tog izračunavanja je bitovid (bitmap) od 23 bajta za disketu od 180 kb, koji CP/M drži u memoriji sistema. Ovako CP/M nije trošio niti jedan blok na disketnoj jedinici za spremanje podataka o slobodnim bajtovima, isto tako sistemu nije potrebno konstantno pozivati sistemske programe koji provjeravaju konsistentnost diskete ili disketne jedinice. Ovo nepisanje slobodnih blokova na disketu imalo je nedostatak koji je zahtijevao od korisnika da osvježi disketu prije nego što je bila izvađena iz disketne jedinice. Ako korisnik nije ovo napravio-la, moglo je doći do korupcije diskete.
CP/M-u je imao samo jedan direktorij, koji je sadržavao upise s fiksnim 32 bajtne. Upisi su imali je sljedeći oblik:
Širina (bajtovi)Sadržaj 1 SS (status). Vrijednosti 0-postoji, 0E5h - obrisan, 80h - skrveno (samo za inačicu v1.4) 8 Ime datoteke 3 tip datoteke 1 Extent (produžetak) rabi se za datoteke preko 16 kb, vrijednosti od 0 do 31 ovo omogućava datoteke s maksimalnom veličinom od 512 kb 1 S1, nije korišteno vrijednost 0 1 S2, nije korišteno vrijednost 0 1 RC, broj upisa (records) svaki upis jednak je 128 bajta, ako je RC jednak 80h tada je ovaj produžetak pun, i mora se stvoriti novi unos u direktorij, i povećati broj koji se nalazi u produžetku za 1 16 Broj 1 kb blokova, na primjer ako je datoteka ima veličinu od 4kb data AL može imati vrijednost 06h08h09h05h00h00h00h00h00h00h00h00h00h00h00h00h. Brojevi označavaju broj bloka a disketi, a 00h označava blok nije dodijeljen u datoteci. Maksimalna broj blokova koji se može dodati je 16, što znači da veličina datoteke je 16 kb