home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / CPM3 / CPM3SCB.LBR / CPM3SCB.DQC / CPM3SCB.DOC
Text File  |  2000-06-30  |  9KB  |  268 lines

  1.                          Jim Lopushinsky
  2.  
  3.                           June 24, 1986
  4.  
  5. Here  is  a  complete description of the fields in the  CP/M  3.1 
  6. System  Control  Block,   as  far  as  I  can   determine.    The 
  7. undocumented  fields  were discovered while dissambling the  CCP, 
  8. Resident BDOS,  and Banked BDOS.   Digital Research documents the 
  9. SCB as 100 decimal bytes,  but in fact it is 152 or 98 hex  bytes 
  10. long.   The  SCB  occupies  the last 152 bytes  of  the  resident 
  11. portion of the BDOS (just before the BIOS).   It begins at xx68h, 
  12. where xx is the last page in the BDOS;  therefore, offset 62h-63h 
  13. (top  of  TPA  address) is at xxFEh,  just before JMP  BOOT  bios 
  14. entry.  The address of the SCB can also be determined as follows:
  15.  
  16.                LXI  D,SCBPB
  17.                MVI  C,49
  18.                CALL BDOS      ;page address of SCB in reg H
  19.                   | 
  20.                   |
  21.  
  22.      SCBPB:    DB   3AH       ;this is where SCB address is
  23.                DB   0         ;get operation
  24.  
  25. To access a field in the SCB,  use the above code sequence,  then 
  26. load  register  L with the field offset as  determined  from  the 
  27. table below.  HL then contains the address of the field.
  28.  
  29. To  accomodate  RSXs  that  modify the BIOS  character  I/O  jump 
  30. vectors  (GET  and PUT RSXs),  a second jump  vector  for  WBOOT, 
  31. CONST, CONIN, CONOUT, and LIST are included in the SCB.  Only the 
  32. banked BDOS uses these vectors.   Each entry consists of 2 3-byte 
  33. entries  which are normally jumps.   An RSX can change the  first 
  34. JMP to an LXI H,addr, where addr is the redirected address of the 
  35. particular routine in bank 1.   The second JMP always points to a 
  36. Resident BDOS bank switch routine which switches to bank 1, calls 
  37. the routine as loaded in HL, and on return, switches back to bank 
  38. 0  and returns to the banked BDOS.   The banked BDOS always calls 
  39. these  5 BIOS routines via the SCB jump table.   This feature can 
  40. be  used by BYE RSXs for safely redirecting console I/O in  RCP/M 
  41. systems.
  42.  
  43. OFFSET TYPE    Description
  44.  
  45. 68H    inst.   Warm   boot  jump  vector  for  the  banked  BDOS.  
  46.                Normally a jump to the BIOS WBOOT vector,  but can 
  47.                be  changed to LXI H,wboot-addr to  redirect  Warm 
  48.                boots to a routine in bank 1.
  49.  
  50. 6BH    inst.   Jump  instruction  to  resident BDOS  bank  switch 
  51.                routine for redirected WBOOT.
  52.  
  53. 6EH    inst.   Console  status jump vector for the  banked  BDOS.  
  54.                Normally a jump to the BIOS CONST vector,  but can 
  55.                be changed to LXI H,const-addr to redirect console 
  56.                status to a routine in bank 1.
  57.  
  58. 71H    inst.   Jump  instruction  to  resident BDOS  bank  switch 
  59.                routine for redirected CONST.
  60.  
  61. 74H    inst.   Console  input  jump vector for the  banked  BDOS.  
  62.                Normally a jump to the BIOS CONIN vector,  but can 
  63.                be changed to LXI H,conin-addr to redirect console 
  64.                input to a routine in bank 1.
  65.  
  66. 77H    inst.   Jump  instruction  to resident  BDOS  bank  switch 
  67.                routine for redirected CONIN.
  68.  
  69. 7AH    inst.   Console  output  jump vector for the banked  BDOS.  
  70.                Normally a jump to the BIOS CONOUT vector, but can 
  71.                be  changed  to  LXI  H,conout-addr  to   redirect 
  72.                console output to a routine in bank 1.
  73.  
  74. 7DH    inst.   Jump  instruction  to  resident BDOS  bank  switch 
  75.                routine for redirected CONOUT.
  76.  
  77. 80H    inst.   List  output  jump  vector for  the  banked  BDOS.  
  78.                Normally a jump to the BIOS LIST vector,  but  can 
  79.                be  changed  to LXI H,list-addr to  redirect  list 
  80.                output to a routine in bank 1.
  81.  
  82. 83H    inst.   Jump  instruction  to  resident BDOS  bank  switch 
  83.                routine for redirected LIST.
  84.  
  85. 86H-8FH        Unknown.
  86.  
  87. 90H    word    Bit mapped vector of drives with open files.
  88.  
  89. 92H    word    Bit mapped vector of drives accessed.
  90.  
  91. 94H-97H        Unknown.
  92.  
  93. 98H    word    BDOS entry point address.
  94.  
  95. 9AH-A0H        Used by directory hashing routines.  Use Unknown.
  96.  
  97. A1H    byte    CP/M version.  Contains 31H.
  98.  
  99. A2H-A5H        4 bytes for user use.   CCP+ as written by me uses 
  100.                offsets A4H and A5H as follows:
  101.  
  102. A4H    byte    Bit mapped:
  103.                0-4  Submit user number+1.  0 = use current user.
  104.                5    reserved.
  105.                6    $$$.SUB needs to be erased by the CCP.
  106.                7    Directory name display flag.  1 = on.
  107.  
  108. A5H    byte    Bit mapped:
  109.                0-4 Load function user number+1. 0= current user.
  110.                5    reserved.
  111.                6    PRL file load
  112.                7    Library member load.
  113.  
  114. A6H-AAH        Unknown.
  115.  
  116. ABH    byte    Submit file drive.
  117.  
  118. ACH    word    Program return code.
  119.  
  120. AEH    byte    Base  page of RSX containing the 2nd  of  multiple 
  121.                commands (next to be executed).
  122.  
  123. AFH    byte    CCP drive.
  124.  
  125. B0H    byte    CCP user number.
  126.  
  127. B1H    word    If non-zero, address of 2nd of multiple commands.
  128.  
  129. B3H    byte    Bit mapped CCP flags:
  130.                0    Submit flag
  131.                1    RSX flag
  132.                2-5  Unknown
  133.                6    Set CCP drive/user to current drive/user.
  134.                7     Chain  flag.   Next  command is  taken  from 
  135.                default DMA buffer (80H).
  136.  
  137. B4H    byte    Bit mapped CCP flags:
  138.                0-1  Display command source drive/user.
  139.                2    Unknown
  140.                3-4  File type search order:
  141.                     00   .COM only
  142.                     01   .COM, then .SUB
  143.                     10   .SUB, then .COM
  144.                     11   .PRL, then .COM
  145.                5    Reset disk system
  146.                6    Reset page mode to default
  147.                7    CCP is executing (used by ^W recall)
  148.  
  149. B5H    byte    Bit mapped CCP flags:
  150.                0    Unknown
  151.                1    Cold start flag (0=cold)
  152.                2-7  Unknown
  153.  
  154. B6H    byte    Console width
  155.  
  156. B7H    byte    Current console column position
  157.  
  158. B8H    byte    Console page length
  159.  
  160. B9H            Unknown
  161.  
  162. BAH    word    If non-zero,  address of redirected console  input 
  163.                characters.
  164.  
  165. BCH    word    If  non-zero,  address of next line of  redirected 
  166.                console input characters.
  167.  
  168. BEH    word    Bit mapped console input physical devices.
  169.  
  170. C0H    word    Bit mapped console output physical devices.
  171.  
  172. C2H    word    Bit mapped auxiliary input physical devices.
  173.  
  174. C4H    word    Bit mapped auxiliary output physical devices.
  175.  
  176. C6H    word    Bit mapped list output physical devices.
  177.  
  178. C8H    byte    Console page mode (0 = page pause).
  179.  
  180. C9H    byte    Default page mode.
  181.  
  182. CAH    byte    Ctrl-H mode (backspace).
  183.  
  184. CBH    byte    Rub/Del mode.
  185.  
  186. CCH-CEH        Used by console routines.  Use unknown.
  187.  
  188. CFH    word    Console mode.
  189.  
  190. D1H    word    Address of 128 byte buffer in common memory.  This 
  191.                buffer  is used only during BDOS function calls by 
  192.                the system,  so it can be used freely between BDOS 
  193.                calls as a scratch buffer.   Also used by the BIOS 
  194.                during warm boot.
  195.  
  196. D3H    byte    Ouput delimiter.
  197.  
  198. D4H    byte    List echo flag (non-zero = echo console output).
  199.  
  200. D5H    byte    Scroll flag (used by console routines).
  201.  
  202. D6H    word    Address of System Control Block.
  203.  
  204. D8H    word    Current DMA address.
  205.  
  206. DAH    byte    Current drive.
  207.  
  208. DBH    word    Current FCB address (in common memory).
  209.  
  210. DDH    byte    FCB error flag.
  211.  
  212. DEH    byte    Same drive flag.
  213.  
  214. DFH    byte    Current BDOS function number.
  215.  
  216. E0H    byte    Current user number.
  217.  
  218. E1H    word    Last directory slot number accessed (first = 0)
  219.  
  220. E3H    word    Address of FCB for function 18 (search next).
  221.  
  222. E5H    byte    Function 17,  18 search type (0 = ? in drive code, 
  223.                0FH = normal search).
  224.  
  225. E6H    byte    Multi-sector count.
  226.  
  227. E7H    byte    BDOS error mode.
  228.  
  229. E8H    4 bytes Drive search chain.
  230.  
  231. ECH    byte    Temporary file drive.
  232.  
  233. EDH    byte    Error drive.
  234.  
  235. EEH-EFH        Unknown.
  236.  
  237. F0H    byte    Drive door open flag.
  238.  
  239. F1-F2H         Unknown.
  240.  
  241. F3H    byte    Bit mapped BDOS flags:
  242.                0-5  Unknown.
  243.                6    Single allocation vectors.
  244.                7    Expanded error messages.
  245.  
  246. F4H    word    Date (days since Jan 0, 1978).
  247.  
  248. F6H    byte    Hour (BCD).
  249.  
  250. F7H    byte    Minute (BCD).
  251.  
  252. F8H    byte    Second (BCD).
  253.  
  254. F9H    word    Common memory base address (non-banked = 0).
  255.  
  256. FBH    inst.   Error message jump instruction to a routine in the 
  257.                banked BDOS.
  258.  
  259. FEH    word    Current  top  of TPA (points to  entry  in  lowest 
  260.                RSX).
  261.  
  262. If anyone has information on any of the "Unknown" fields,  please 
  263. let me know.
  264.  
  265. Jim Lopushinsky
  266. Meadowlark RCP/M+
  267. 403-435-6579   (300/1200 baud)
  268.