../../images/zoom.gif
../../images/exit.gif

 CPM
(CP/M Control program and monitor, digital research)
Lezing H.R. Plooijer
(voor regio Den Haag)

 
 

Samenvatting van de lezing van H.R. Plooijer, PA0QRB, op 10 september 1986
Futuristic yesterdav, reality today. ( Robert A. Heinlein )
Uit Datacheck, regio publicatie ATOM Userclub Den Haag

In verband met de mogelijkheid om binnenkort CP/M 2.2 software op de ATOM te draaien volgt hier een korte inleiding tot dit operating system.

  1. Operating system software
    Is de software die nodig is om met een computer te kunnen werken. Het bestaat uit het eigenlijke O.S. plus een aantal utilities bijvoorbeeld voor overbrengen van data, onderzoeken van schijf, wijzigen van parameters van het O.S. etc. Het O.S. wordt door de systeemprogrammeur ook gebruikt voor I/0 (input/ output) faciliteiten. In het ideale geval hoeft de programmeur de hardware niet meer zelf te benaderen, en kan hij alles af via system-calls (virtuele machine). Doorgaans geïmplementeerd: I/0 via randapparaten en achtergrond- geheugen ( meestal op floppy-disk ). Ingeval floppy-disk » Disk Operatinq System ( DOS ).
  2. CP/M ( Control Proqram for Microcomputers ).
    Besturingsprogramma voor microcomputers. In dit geval micro's met een CPU van de 8080 familie ( 8080A, 8085, Z80 ). Het implementeert de virtuele machine een heel eind, maar bijv. schermaansturing / qraphics is afwezig, en communicatie is primitief ( snelheden en formats zijn niet via het systeem in te stellen ).
  3. Waarom CP/M?
    Hoe komt het dat CP/M zo'n standaard voor de bovengenoemde CPU's is geworden? De totale randapparatuur-besturinq is samengebald in een module, het z.g. BlOS ( Basic I/0 System ). Hogere eigenschappen ( bv. bestandsbeheer EN alle system-calls! ) bevinden zich hier buiten, n.l. in het z.g. BDOS ( Basic DOS ).
  4. BDOS
    Het BDOS verricht alle taken waar randapparatuur voor nodig is via calls naar het BIOS. Alleen het BIOS is voor de verschillende machines verschillend ( door de per apparaat afwijkende hardware ), de rest van het O.S. is identiek » alle system-calls zijn ook identiek » alle programmatuur die uitsluitend van system-calls gebruikt maakt kan op alle fabrikaten machines draaien (z.g. binaire compatibiliteit). Gevolg: enorme hoeveelheid software ( ook "vrije" software' ) is beschikbaar.
  5. ../../images/terug.gif De organisatie van CP/M.

    Hierboven zijn reeds enkele modules genoemd. Hieronder volgen er nog een aantal:

  6. Maxmem 	----------------	( hoogste fysieke RAM-adres ) 
    	BIOS ( BASIC I/0 SYSTEM ) 	\ 
    Bios call loc 	----------------	( variabel, afh. grootte BIOS ) } FDOS 
    	BDOS ( BASIC DOS ) 	/ 
    FBASE 	----------------	( start BIOS min 0E00H bytes ) 
    	CCP ( Console Command Processor ) 
    CBASE 	( FBASE min 0800H bvtes ) 
    T PA	( Transient Program Area. gebruikersgebied ) 
    TBASE 	---------------- ( BOOT + 0100H ) Page zero. waarin: 
    	-BD0S call-vector ( BOOT + 0005H ) 
    	-BD0S FCB ( File Control Block ) 
    	-BD0S command line buffer 
    	-Default Disk Memory Access Area 
    	-CPU interrupt vectors 
    	-I/OBYTE ( koppeling logische aan fysieke devices ) 
    BOOT 	----------------	Sprong hier geeft warme BOOT CP/M. 
    		Meestal laagste RAM-adres. 
    
    ../../images/terug.gif
  7. Booten
    Na het opstarten ( kortweg booten) vanaf een systeemschijf ontstaat in RAM bovenstaande indeling.
    1. BI0S reeds behandeld. wordt verder niet op ingegaan.
    2. CCP Dit is het voor de gebruiker direkt zichtbare deel van CP/M.
    3. Dit deel van het 0.5. zorgt voor kommunikatie tussen , gebruiker en FD0S.

    CP/M meldt zich met de prompt: A:>
    ~
    : Default drive ( alle opdrachten worden op deze drive uitgevoerd, als de gebruiker verder geen drive specificeerd ).

    Opdrachten aan CP/M zijn van de vorm:

    COMMAND [PARM1 [PARM2J[...PARMn]] <CR
    CP/M voert nu het programma COMMAND.COM uit. met ( optional ) parameters.
    Voorbeeld: DIR B >> Display directory drive B.

  8. ../../images/terug.gif
  9. Commando's
    De CCP kent de volgende "ingebouwde" commando's:
    DIR drive( zie boven )
    USER N( set user area N )
    ERA file( erase file )
    REN file1 file2( rename file )
    SAVE NN file( save TPA op schijf )
    TYPE file( display file )
    D: ( drive D = default )
    Control-C( warme start )
    De overige commando’s, zoals gebruikersprogramma's en CP/M utilities. worden geladen van schijf en vervolgens uitgevoerd.
  10. ../../images/terug.gif
  11. File-namen
    File-namen zijn van de vorm:

    [D:]filename.ext (8.3)
    D: is weer optional, schakelt drive D voor.
    filename: elke combinatie van 1-8 letters en/of cijfers.
    ext : elke combinatie van 0-3 letters en/of cijfers.
    CP/M herkent slechts een ext(ension)
    als zodanig: COM. Dit zijn gebruikers commando’s

  12. De gebruiker kan een programma laten uitvoeren door de naam ervan ( filename) achter de prompt te typen.
    Het commando. COM moet worden weggelaten.
    Ook aan programma's kunnen PARM1 en PARM2 worden meegegeven, deze komen in het FCB en in de console buffer terecht. De maker van het programma zorgt dat deze informatie vanuit de FCB of de console buffer op de gewenste plek terechtkomt.

  13. Voor de CCP bestaat een vervanging in Z80-code die veel meer mogelijkheden kent dan de originele CCP. Deze heet ZCPR2 ( Z80 Console Processor Replacement version 2 ) en deze is in public domain verkrijgbaar.
    Er is inmiddels trouwens ZCPR3, dat noq beter schijnt te zijn. Heb dit nog niet zelf kunnen controleren.
    Het installeren van ZCPR's vereist wel flink wat kennis van assembly language programming en de interne huishouding van uw BIOS.
    Er is voor ZPCR3 trouwens wel een autoinstall versie, maar die is niet gratis.
    Inlichtingen alsmede de schijven van ZPCR bij de CP/MS GG.

  14. ../../images/terug.gif
  15. BDOS
    Houdt de disk-inhoud bij, tevens communicatie met randapparatuur via system-calls.
    System-calls globaal te verdelen in:
    - Disk I/0
    - Console I/O
    - Printer aansturing
    - Aansturing 2e console
    - Aansturing 2e massa-opslagmedium ( bv. tape ), wordt meestal voor modem gebruikt.
    System-calls zijn van de vorm:

    Register C: nummer van de callLDC,OPENF; open file
    Reg. paar DE: evt. parametersLDDE,FCB; filenaam loc
    Roep het systeem aanCALLBD0S ; doe het
    Return parameters komen meestal via de accu binnen, of 16- bit data via reg. paar HL. Uitgebreide gegevens hierover in de CPIM interface-guide.
  16. ../../images/terug.gif
  17. Page zero.
    Dit is een soort kladblaadje voor CP/M. Voor de system programmer zijn van belang het FCB hier komen alle PARM's terecht die via de CCP aan een commando werden meegegeven , (makkelijk als dit een filenaam was, dan hoeft er niets leer mee te gebeuren, staat al OP de juiste plek! ).
    Verder zit hier de 16-bit vector die wijst naar de BD0S system call processor.
    De interrupt vectoren worden vaak door de BD0S gebruikt, voorzichtig dus hiermee!
    Een sprong naar locatie BOOT geeft een "warme" start van het systeem, dwz. het BD0S en de CCP worden opnieuw geladen en het commando wordt overgedragen aan de CCP. Voorts worden alle disks gereset naar R/W.

    De Default Disk Memory Access Area ( default DMA area ) dient als buffer voor ingelezen disk-sectoren. Het adres hiervan kan overigens ( system-call ) veranderd worden.
    Het IOBYTE bevat de tabel van koppeling van logische en fysieke devices. Zie STAT-utility voor verdere details.
  18. ../../images/terug.gif
  19. TPA
    Hier worden alle gebruikersprogramma's geladen en uitgevoerd. De grootte ervan is uiteraard afhankelijk van de hoeveelheid beschikbare RAM.
    Na aanroepen van het gebruikersprogramma vanuit de CCP wordt het programma geladen en de programmateller op 0100H gezet, hier moet zich dus de 1e instructie van het programma bevinden.
    Een hint: de sprong naar 0100H wordt door de CCP uitgevoerd als een CALL-instructie. Als u direct de waarde van de stackpointer ergens wegzet en als het gebruikersprogramma afgelopen is deze waarde weer herstelt. kunt u met een RETurn-opdracht terug naar de CCP ( vooropgesteld dat het gebruikersprogramma geen gebruik maakt van de RAM waar de CCP zit! ).
    Heeft u de CCP-RAM toch moeten gebruiken, dan kunt u altijd nog terug met JP BOOT. Het is uiteraard niet de bedoeling dat het FDOS of page zero overschreven wordt!
  20. ../../images/terug.gif
  21. CP/M utilities.
    Hulpprogrammaatjes samen met CPIM meegeleverd, om uw leven gemakkelijker te maken.
    • PIP ( Peripheral Interchange Program ). Is bestemt voor uitwisseling van data tussen diverse randapparaten ( peripherals ). Commando van de vorm: PIP bestemming = bron Het bestand "bron" wordt overgebracht naar "bestemming". Dit kan een randapparaat zijn, zoals LPT: ( printer ), maar ook een disk-bestand. In dat geval maakt CP/M een nieuw bestand aan met naam "bestemming" en kopieert daarin de inhoud van "bron". De "bron" kan ook een randapparaat zijn, bv. RDR: ( tape reader ). Het commando < PIP CON:=RDR: > drukt alles dat via RDR: binnenkomt af op uw beeldscherm.
    • STAT ( STATus ). Dit is een soort duizendpoot met meerdere toepassingen:
      • Afdrukken disk statistics, zoals capaciteit, indeling etc.
      • Afdrukken & wijzigen file attributes ( RID en SYS ), file-grootte en vrije ruimte op schijf.
      • Wijzigen/afdrukken toewijzingen randapparaten. CP/M kent 2 soorten devices. nl. logische en fysieke. De logische devices zijn CON: ( system console, VDU ). LST: ( list device, printer ), RDR: ( tape reader ) en PUN: ( tape punch ). Deze logical devices zijn te benaderen via system-calls STAT "koppelt" de gewenste physical device driver ( in het BIOS) aan de juiste logical device. -. Voorbeeld: STAT CON:=TTY: ; Hierbij wordt de teletype aan de system console gekoppeld. De tabel van koppellingen bevindt zich in het IOBYTE.
      • MOVCPM ( MOVe CP/M )Benodiod voor het aanpassen van CPIM aan afw1jkende of nieuwe RAM-grootte
      • SYSGEN ( SYStem GENeration ) Voor het aanmaken van n1euwe systeemschijven ( bootable disks )
      • ASM ( ASseMbler ) Assembly Language vertaalprogramma, zet assemblersource om in een HEX-object bestand. Dit is een 8080-assembler.
      • LOAD. Zet een HEX-object file om in binaire code, die de CPU kan uitvoeren. Dit wordt op schijf gezet als een COM-file. ( progr.hex à progr.com ).
      • ED ( text EDitor ). Zeer primitieve tekstverwerker. Eigenlijk alleen ge- schikt om korte source-bestandjes voor ASM aan te maken.
      • DDT ( Dynamic Debugging Tool ). Standaard object-code debugger met mogelijkheden als onderzoeken CPU registers, single steppinq, breakpoints. disassembly. memory-dump etc.
      • SUBMIT ( batch file processor ). Stelt u in staat een serie CP/M opdrachten achter- elkaar uit te voeren zonder interaktie van uzelf. Gebruikt een bestandsnaam .SUB als input. Dit be- stand bevat de opdrachten. Voorbeeld: SUBMIT COPYDISK » voert alle opdrachten uit in het bestand COPYDISK.SUB.
      • FORMAT. Om nieuwe schijven te formatten.
      • DUP ( disk duplicator ). Kopieert een hele schijf in een bewerking ( wordt niet altijd meegeleverd ).
    • TLX
      TLX is een typisch voorbeeld van een "niet netjes" geschreven CP/M programma. Het "niet nette" zit hem in de schermaansturinq ( niet gedefinieerd in CP/M ), aansturing , de I/0-poort en de real-time clock. Voor het overige is de zaak redelijk netjes gehouden. Er is op uitgebreide schaal gebruik gemaakt van de file I/0 mogelijkheden van het systeem.