                 
    CP/M-80,    
     
,        (.,  , Hughes L.E.
System programming under CP/M-80, Reston: Reston, 1983)

     CP/M-80 ( Gary Kildall, 
Digital Research,   (2.2)   1979 )
                      
,     ,  ,
         (.,  ,  Practical
Computing, April 1984),       
,    .      ,  
1983              
    :

	58%	CP/M-80
	29%	MS-DOS
	24%	Apple DOS
	12%	p-System
	 2%	CP/M-86
	 2%	Unix
	 2%	Oasis
	 1%	Pick
	 4%	 (iRMX-86, TurboDOS, XENIX, SB-80,
			   MP/M-II, MP/M-86  .)

     ,       TurboDOS, SB-80,
MP/M-II   CP/M-80, a MS-DOS    
CP/M-80        .      
CP/M-80   '                 
 .
             16  32
            
      MS-DOS,  XENIX    UNIX,    
 CP/M-80  (          1983-1984
)     , 
  MSX.  


        CP/M-80-2.2  (  Control  Program  for
Microcomputers   -             -)
               
 ,      ,
               8-
 Intel 8080 (    -  58080)
    (Intel  8085,  Zilog  80  ..).   
        
 :
	-    20  (  2.2)
	   ,    0000H;
	-         
	    ;
	-     ,
	   /   ( + ),
	     ASCII (American Standard
	  Code for Information Interchange - 
	      ,  
	      -7  -8). 
                 
         CP/M-80      
 ,   '8080.
                  
    .     
            (..   ),    
               .
   :
*       
   .    
         BIOS'
  (. ).
*    (  ) 
    (  8-  
      1 ), 
        .
*      () ,
         _______
    .
*         .
  , ,     5,6,7,8,22,28,29.
          ,
          . 
    ,   ,  
        . ,
         
        ,  
   . 
           
         
    ,       .  
           
(      )   ( 
  ).   ,      
           CP/M-80      
8-          
  ( IBM-3740),     
: 1,7,13,19,...  
       ,       , 
 ( CP/M-80     128  ),  
          
       .


        CP/M-80    :

BIOS (Basic Input/Output System) -   /.
	    , :
	-        ;
	-    ,   ;
	-     
	  ;
	- /     ;
	-  (  ) .
	      ,
	  .  -
	   .  BIOS'
	 ,     
	     
	.

BDOS (Basic Disk Operating System) -  
	 .   
	 ,    
	/,     ""
	.     :
	-      ;
	-      
	      ;
	-       ;
	-    ;
	- , , , , 
	    ;
	-  /  
	  ;
	-    / .
	BDOS    / 
	,      BIOS' 
	 BDOS  -  CP/M.
	   ,  
	    ,  
	    BDOS.

CCP (Console Command Processor) -   .
	     
	 .   
	,      
	   :
	-      ;
	- ,    ;
	-  ()  .
	   .  
	  BDOS'.  .   
	  .   CCP 
	     BIOS'.


	       CP/M-80
		       .

 :

	MSIZE -     ( CP/M-80-2.2
		 '   20 );
		 MSIZE   
		    MOVCPM.
	BIAS  = ( MSIZE - 20 ) * 1024

     CP/M-80:

	CCP   = 3400H + BIAS
	BDOS  = CCP + 806H
	BIOS  = CCP +1600H

----------------------------------------------------------------
       (    )

A.   ( 0000 - 00FF )

	0000 - 0002	JMP WBOOT (. BIOS)
	0003		I/O byte (. BIOS)
	0004		current User & Disk (. CCP)
			        (uuuudddd)
	0005 - 0007	JMP BDOS 
	0008 - 002F	RST1 - RST5 (  
			,   )
	0030 - 0037	  
			( Digital Research )
	0038 - 003F	RST7 -  
			: DDT, SID  .
	0040 - 004F	    
			   
			  IMSAI FIF .
			   
			    
			BIOS',     
			 - .
	0050 - 005B	  
			( Digital Research )
	005C - 006B	1st SLOT -   ( 
			),   CCP
			   (
			 - . BDOS, FCB-)
	006C - 007B	2nd SLOT -    ( 
			) ...
      ( 005C - 007C )	      
			   FCB- 
			.
	007D - 007F	Random Record Pointer (. BDOS,
			FCB-) -    
			FCB-,   
			005C - 007C,   
			    (. BDOS,
			Write/Read Random). 
	0080 - 00FF	DMA- (   
			)  .

B.    -    0100,
	      
	    .
	    
	  :

	CCP-1	     
		     
		""  -  
		,   RET ( 
		CCP    
		    
		CALL 0100H), ,    
		 ,    
		 .

	BDOS-1	     CCP
		""   ,
		  ,     
		    ("" ),
		..    0 BDOS' 
		  JMP 0000.

	BIOS-1	    
		,    
		  BDOS'.   
		  JMP 0000.

	 1:    
		        CCP  BDOS.
	 2:     
		       - BIOS+3    0001 
		       0002, BDOS -   0006  0007 (.
		       A.). CCP=BDOS-806H.

C. Console Command Processor (CCP) -   
	( CCP - BDOS-1 )

D. Basic Disk Operating System (BDOS) -  
	( BDOS - BIOS-1 )		 

E. Basic Input/Output System (BIOS) -  
	( BIOS - BIOS+BIOSsize)	      /

	:   BIOS' ,   
		      (. ),  
		    ,    BIOS 
		    ,  MSIZE  , 
		        (,  64 
		     62 ).

----------------------------------------------------------------

			    B I O S
		  (Basic Input/Output System)
		    /

 BIOS':
				
  	  			
================================================================
BIOS+00H:  BOOT	 +++			C=0 (User=0, Disk=0)
	  ;  -
	User & Disk ( 0004)  I/O byte ( 0003)
----------------------------------------------------------------
    +03H:  WBOOT +++			C=UserDisk  
	  (CCP & BDOS)	    (uuuudddd)
	    , 
	 0003  0004;  C    0004
----------------------------------------------------------------
    +06H:  CONST			A=constat
	   ()
----------------------------------------------------------------
    +09H:  CONIN			A=
	   
----------------------------------------------------------------
    +0CH:  CONOUT	C=
	   
----------------------------------------------------------------
    +0FH:  LIST		C=
	   
----------------------------------------------------------------
    +12H:  PUNCH	C=
	   
----------------------------------------------------------------
    +15H:  READER			A=
	     
----------------------------------------------------------------
    +18H:  HOME
	     HOME
	(  SETTRK  BC=0)
----------------------------------------------------------------
    +1BH:  SELDSK	C=disk#		HL=DPH
	  (    
	 BIOS';    , ,
	  ,    ,
	:
		A -  1,   ;
		B -  2,   ;
		C -  1,   ;
		D -  2,   )
----------------------------------------------------------------
    +1EH:  SETTRK	BC= 
	   ( 0 - ... )
----------------------------------------------------------------
    +21H:  SETSEC	C=. 
	   (    , 
	    - , ,  
	CP/M-     
	  0   128)
----------------------------------------------------------------
    +24H:  SETDMA	BC=DMA () 
	     
	(  ,    
	      ,  
	     128 ,  
	   READ  WRITE)
----------------------------------------------------------------
    +27H:  READ				A=dskstat
	    (  
	:   (),   
	,   -    ,
	     
	  READ;     
	     SETSEC (SETTRK,
	   ), SETDMA, READ)
----------------------------------------------------------------
    +2AH:  WRITE			A=dskstat
	    (  READ)
----------------------------------------------------------------
    +2DH:  LISTST			A=lststat
	   
----------------------------------------------------------------
    +30H:  SECTRN	BC=.	HL=.
			DE=  
	     
================================================================

	constat = 0,       
	    (  )
	disk# = 0 ( A), 1 ( B), ...
	DPH (Disk Parameter Header) = 0,    
	     ;   ,  DPH 
	         ,
	        ( 2 ):
		-     ;
		- 0  \
		- 0   |  BDOS'
		- 0  /
		-       ;
		- DPB (Disk Parameter Block)  , 
		     ;
		-     (
		      
		      
		   );    
		      BDOS 
		      
		         
		   ;
		-      (
		       
		  ,     ,
		    - )
	dskstat = 0,      
	    (       >0)
	lststat = 0,      
	       ( 0,  )

	+++     
	        (CCP), 
	      C   .

 *          *
 *        ,     *
 *		      		     *

		      Disk Parameter Block
		       

.     8" (CP/M Standard) 
---------------------------------------------------------
SPT  word   26      
		(sectors per track);
BSH  byte    3   ,    
		  ,  
		  (allocation group size) - 
		  1024 
		(block shift factor);
BLM  byte    7    =   / 128 - 1
		(block mask);
EXM  byte    0    ;  
		     
		  (. BDOS),   
		     32  
		    
		  ;  EXM=0, 
		 ,  
		 ,  16 ;  1,  32 
		 ..,    -  
		    , 
		    CP/M = 1,  
		  - 2 (.  BDOS'
		  )
		(extent mask);
DSM  word  242  =      ( 
		 ) - 1
		(disk maximum);
DRM  word   63  =     - 1
		(directory maximum);
AL0  byte 0C0H      -  
		    8"  
		,     
		(allocation vector, byte 0);
AL1  byte    0     
		(allocation vector, byte 1);
CKS  word   16   ( )    =
		    / 4;
		     
		(,     -
		  ),  CKS  
		 
		(shecksum vector size);
OFF  word    2  ,  BDOS   
		    
		 , =   ,
		    ; 
		    ,  OFF=0
		(track offset).

			    I/O byte
		        /

    / ( 0003)   
     CP/M.
    CP/M    :

   CON:	   (  )
   LST:	   
   PUN:	   ( )
   RDR:	     ( )

                 
  PIP,  STAT,        .     
      
 

   !!!   BIOS   
	 (..   I/O  
	  ;   
	  ,   BIOS  
	   )	    !!!,

         
      I/O
, ,    STAT -

	STAT LST:=LPT:

      / :

	:	7  6  5  4  3  2  1  0
	       -----------------------
I/O byte:     | LST | PUN | RDR | CON |
	       -----------------------

----------------------------------------------------
		    
  	00	01	02	03
====================================================
LST	    7, 6	TTY	CRT	LPT	UL1
()
----------------------------------------------------
PUN	    5, 4	TTY	PTP	UP1	UP2
()
----------------------------------------------------
RDR	    3, 2	TTY	PTR	UR1	UR2
()
----------------------------------------------------
CON	    1, 0	TTY	CRT	BAT	UC1
()
====================================================

----------------------------------------------------------------

			     C C P
		  (Console Command Processor)
		    

            
() :

 DIR [[d:]<AFN>]	-     
			   (  
			  );
 ERA [d:]<AFN>		-  ;
 TYPE [d:]<UFN>		-     ;
 REN <NEW>=<OLD>	-   (  
			     [d:]<UFN>);
 SAVE <size> [d:]<UFN>	-      
                           0100H   <size> 
			   (  = 256 );
 USER <>		-    ( 0 
			  15;    
			     0004);
 d:			-    (A - 0, B - 1 
			  ..;   
			      
			  0004);

     d  -      (A, B, C, ...  P -  CP/M-80-2.2
  16 ),     
,      : A> ; AFN / UFN -
 ,    < >.<>,   
    /     
(  '?',  .   BDOS).     
8 ,  - 3.     CCP     '*',
           
'?',         DIR A:TEST*.*   
DIR A:TEST????.???
          : .  : * ?  ,
  ,    = _ ; < >  ,
  -.

            , 
CCP        <>.COM ,
    ,          0100H,
       .   ,    
       
    ,    0080H ( 
0080H      ,     
 0081H    00 -  ).   
,  CCP      
          005CH 
006CH.

!!!       CCP 
     6-    :
        CCP   "" USER,
      -    BDOS'; 
     ,  CCP   
         " "  
    :	DI
		HLT	;
       CCP   
      MOVCPM,   
     SYNCHRONIZATION ERROR!   
     HLT						     !!!

!!!      CCP 
     BDOS #10,    
         (. BDOS)       !!!

		    

          CCP   
  (   'A')  $$$.SUB.   
 ,           ,
    ,        
  ,      
            .      
  $$$.SUB.   $$$.SUB      
  SUBMIT,     .

!!!    ,   
    DIR  TYPE     
     						     !!!

!!!   ctrl-C, ctrl-S  ctrl-P  
     BDOS					     !!!

		     

    CCP    (  ) 
  ,       
(         
).                  CCP,
        CCP+6      ,
   BDOS #10.    
:          ,
            
.    CCP (  BIOS'):

	CCP+0	-     ( 
		  );
	CCP+3	-  .

----------------------------------------------------------------

			    B D O S
		  (Basic Input/Output System)
	        

   BDOS      /    .
        ,   ,   ,
           .
       .
            
      ,         
 :

----------------------------------------------------------------
  : |  1 |     8     |      3     |  1 |  2  |  1 |
:      | UN |   |  | EX | 0 0 | RC |
----------------------------------------------------------------
  : |			16		       |
:      |	         |
----------------------------------------------------------------

UN - (User Number)   (BDOS   
      ,       
     ( BDOS #32));      
       0E5H,    
      (       ,
         ) 
      0E5H    -   ,
     ,    RECLAIM   POWER;
EX - (Extent number)   16- 
         (  );  
           16 (.
     BIOS),   EX    
     16- "" ,   RC  
          ""; :
      FILENAME.TXT     24 ,
           32,  
      (     ):

	00 F  I  L  E  N  A  M  E  T  X  T  01 00 00 40
	04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 00 00 00 00

            2,  
      - ;
RC - (Record Count)     
      ;

           ,
 DSM (.  BIOS,   )   255,  
      .       
    : 16    
    8   .

----------------------------------------------------------------

               BDOS'     
   FCB- (File Control  Blok)  -
    ,     
   :

----------------------------------------------------------------
  : |  1 |     8     |      3     |  1 |  2  |  1 |
:      | DN |   |  | EX | 0 0 | RC |
----------------------------------------------------------------
  : |			16		       |
:      |	         |
----------------------------------------------------------------
  : |  1 |  3				       |
:      | CR | RN				       |
----------------------------------------------------------------

     (  ):

DN - (Drive Number)   () - 0= (..
         BDOS #14;    
     0004,   CCP), 1=A, 2=B  ..;
CR - (Current Record pointer)   
           ;
RN - (Random Record Number)   
           ( 
      BDOS'    
        ).

!!!          '
              .
           21H  5FH 
      : 	= _ . : ; < > *			     !!!

     '?'     -      
  ()    .     ,     
          '?',  
 (AFN - Ambiguous File Name).     
    BDOS: #17, #18, #19.  ( 
#17  #18      : EX (Extent  Number)
 DN (Drive Number)).     (UFN -
Unambiguous  File  Name)         
 BDOS.


		              B D O S
		    ------------------------

           BDOS        C,
  -    DE  (    
E).             A  HL.
 : CALL 0005.

#        	     
================================================================
 0  System Reset ( ) -  
     JMP 0000;
----------------------------------------------------------------
 1  Console Input (  ) - A=  ;
        ,   
    ,   ctrl-P (printer echo)  ctrl-S (screen
    pause);
----------------------------------------------------------------
 2  Console Output (  ) - E=  ,
       ,   ctrl-P (printer
    echo)  ctrl-S (screen pause);
----------------------------------------------------------------
 3  Reader Input (  ) - A=  ;
----------------------------------------------------------------
 4  Punch Output (  ) - E=  ;
----------------------------------------------------------------
 5  List Output (  ) - E=  ;
----------------------------------------------------------------
 6  Direct Constrol I/O (  ):
	 :		   :
	E=0FFH		  A=   ( )
	E=0FEH		  A=0 ***	     ( )
	E=(<0FEH)   A=0		     ( )
    ***    Zero,      ;
----------------------------------------------------------------
 7  Get I/O byte ( I/O ) - A=I/O  (
     0003);
----------------------------------------------------------------
 8  Set I/O byte ( I/O ) - E=I/O ;
----------------------------------------------------------------
 9  Print String (    (+)) - DE=
    ,     $  , 
      ,   ctrl-P (printer echo) 
    ctrl-S (screen pause);
----------------------------------------------------------------
10  Read Console Buffer (   ) - DE=
    ,   :
	-----------------------------------------------
	| BM | BL |    BM  |
	-----------------------------------------------
	BM -     ;
	BL -   (  );
        CR ( LF)   
    ;     = ctrl-C,  
     ;     
      :
d	BS	-     ;
t	DEL	-     ;
t	ctrl-R	-       
		   ;
d	ctrl-X	-      
		   ;
t	ctrl-U	-        
		   ;
d,t	ctrl-E	-       
		  (      );
    ,   t,  
      ,    
         
    ,  ;  d  ;
----------------------------------------------------------------
11  Get Console Status (  ) - A= 
    (=0,       );
----------------------------------------------------------------
12  Return Version Number (   CP/M (BDOS))
      2.2 H=0, L=22H;
----------------------------------------------------------------
13  Reset Disk System (  ) - 
          , 
    , A=0FFH,       $$$.SUB
    (. CCP,  ),  00   ;
----------------------------------------------------------------
14  Select Disk ( ) - E=0( A), 1( B)  ..;
      ()     , 
     :
		Bdos Error on X: Select
      ,      
    ,   :
		Bdos Error on X: Bad Sector
    ( X   - A, B, C, ...);
        BDOS'    
    : #15 - #23, #33 - #36, #40;
----------------------------------------------------------------
15  Open File ( ) - DE= FCB-; A=0FFH, 
      , = ,  ;
          0  3, 
           
     ,     DMA-,
      #26;
----------------------------------------------------------------
16  Close File ( ) -   Open
    File;
----------------------------------------------------------------
17  Search for First (     ) -
      Open File   ,  
     ,  ,   DN  EX 
     ;
----------------------------------------------------------------
18  Search for Next (   ) - (DE 
     , ..    
     Search for First)   Search for
    First,     ,
     ,   FCB-; 
          :
	Search for First	-   ,
	Search for Next		-   ,
	Search for Next		-   ,
	     . . .		-  ..,
	Search for Next		-    -  ;
    !!!      
	_________  BDOS		     !!!
    -        
     (),      ,
      (..   
     );
    -      EX,   
      ,  ;
    -      DN   
      ;
----------------------------------------------------------------
19  Delete File ( ) -   Open
    File,  ,      
     ();
----------------------------------------------------------------
20  Read Sequential (  ()) -
    DE= FCB-,   ; A=0, 
       ,    ;
       CR;
----------------------------------------------------------------
21  Write Sequential (  ()) -
    DE= FCB-,   ; A=0,
       ,    ;
       CR;
----------------------------------------------------------------
22  Make File (  ) - DE= FCB-; A=0FFH,
      , = ,   
    ;
----------------------------------------------------------------
23  Rename File ( ) -  
    Open File   ,   FCB-  
       :
	<>	-   FCB+0 
	<>		-   FCB+16 ( DN 
			    );
----------------------------------------------------------------
24  Return Log-in Vector (   
     ()) -  HL  
    ,   ,   1, ,
          BDOS; 
      L   A,  - B  ..;
          #13;
----------------------------------------------------------------
25  Return Current Disk (   ) -
    A=  BDOS (.  #14);
----------------------------------------------------------------
26  Set DMA Address ( DMA ) - DE=DMA-
    (     , .. 128
    );
----------------------------------------------------------------
27  Get ADDR (Alloc.) (    ) -
    HL=      (. BIOS);
----------------------------------------------------------------
28  Write Protect Disk ('    ) -
          ( 
     BDOS),       ;
----------------------------------------------------------------
29  Get R/O Vector (    ) -
      #24   ,  ,
      1,     
     ;
----------------------------------------------------------------
30  Set File Attributes (  ) - DE=
    FCB-; A=0FFH,    , =0,   
    ;  FCB-      
          :
	     R/O,
	     SYS,  ..;
----------------------------------------------------------------    
31  Get ADDR (Disk Parms) (    )
    - HL= DPB- (. BIOS);
----------------------------------------------------------------
32  Set/Get User Code (/  ) -
     E=0FFH,  A=  ; 
      ,    E;
----------------------------------------------------------------
33  Read Random (  ()) - DE=
    FCB- ( RN ),   ;
    A= :
	0 -  ,
	1 -    ,
	3 -     ,
	4 -      ,
	6 -     ;
     CR  RN  !
----------------------------------------------------------------
34  Write Random (  ()) - DE=
    FCB- ( RN ),   ;
    A= :
	0 -  ,
	3 -     ,
	5 -  ,
	6 -     ;
     CR  RN  !
----------------------------------------------------------------
35  Compute File Size (  ) - DE=
    FCB- ( RN ), BDOS     
    RN     ;
----------------------------------------------------------------
36  Set Random Record (    
     ) - DE= FCB- ( RN ), BDOS
           
         RN;
----------------------------------------------------------------
37  Reset Drive (   ) - DE= 
      ( #24),   ,
      1,    
      ( 0    );
----------------------------------------------------------------
40  Write Random with Zero-Fill (  ()
          ) -
      Write Random   , 
             
     ;
================================================================

    
     ;
======