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 / BEEHIVE / OS / CPM22INF.ARC / CPM22.NOT next >
Text File  |  1990-07-21  |  62KB  |  1,477 lines

  1.                                     CP/M   V2.2
  2.                              Application Note 01, 2/20/82
  3.                               The CCP Auto-Load Feature
  4.  
  5.                          Copyright   1982 by Digital Reserch
  6.                 CP/M is a registered trademark of Digital Research.
  7.                        DDT is a trademark of Digital Research.
  8.                                 Compiled November 1982
  9.  
  10.  
  11.           Applicable products and version numbers:  CP/M   V1.4, V2.0, V2.1,
  12.           and V2.2
  13.  
  14.           Program:  CCP (Console Command Processor)
  15.  
  16.                Usually, you interact with the CP/M CCP following the sign-on
  17.           prompt.  With  the CCP Auto Load feature, CP/M executes an initial
  18.           program immediately after loading the operating system.
  19.  
  20.                Under usual operation, the CCP receives control from the BIOS
  21.           upon  a  warm  or  cold  boot.  The  beginning  of  the CCP module
  22.           contains a two-element jump vector and a command line  that  takes
  23.           the form:
  24.  
  25.  
  26.                CCP:    JMP     CCPSTART       ;START THE CONSOLE PROCESSOR
  27.                        JMP     CCPCLEAR       ;CLEAR THE INITIAL COMMAND
  28.                        DB      127            ;MAXIMUM COMMAND LENGTH
  29.                CL:     DB      0              ;COMMAND LENGTH
  30.                        DB      '        '     ;8 BLANK CHARACTERS
  31.                        DB      '        '     ;       "
  32.                        DB      'COPYRIGHT...' ;COPYRIGHT NOTICE
  33.  
  34.  
  35.                If control is transferred to location CCP (address 3400H in a
  36.           20K  CP/M),  the  console processor examines the command length at
  37.           location CL (3407H in a 20K CP/M).  If the command length byte  is
  38.           zero,  then  you  receive the sign-on prompt and the CCP waits for
  39.           console input.  If the command length byte is not  zero,  the  CCP
  40.           assumes  an  initial  command  has  already been entered.  The CCP
  41.           executes the command on each cold  or  warm  boot  if  control  is
  42.           transferred  to  location CCP.  However, if control is transferred
  43.           to location CCP+3 (JMP CCPCLEAR), the initial command  is  cleared
  44.           and  the  program  enters  the  CCP  at  the  command  line level,
  45.           displaying the default drive prompt.
  46.  
  47.                Specify the length of the initial command using a nonzero  CL
  48.           byte.  The  command  must be followed by a terminating zero.  CP/M
  49.           executes the command following that CL  byte.   Although  only  16
  50.           blank  spaces  are  provided,  you  can  move the Digital Research
  51.           copyright notice for more spaces.
  52.  
  53.  
  54.  
  55.  
  56.             You can initialize  the  command  line  of  the  CCP  on  the
  57.           operating  system  tracks  or  in the relocatable image within the
  58.           MOVCPM data area.  The initial command executes in distributed  or
  59.           reconfigured CP/M systems.
  60.  
  61.                Following SYSGEN and SAVE  commands,  save  the  CP/M  memory
  62.           image above the cold boot loader code starting at location (980H).
  63.           If the system boot routines require more than 80H bytes,  the  CCP
  64.           code begins at location 0A00H.
  65.  
  66.                Modifying MOVCPM.COM is similar to modifying  the  CCP.   The
  67.           difference is that the CCP always begins at location 0A00H.
  68.  
  69.                The  following  procedure  uses  DDT    to  modify  the  CCP,
  70.           allowing  execution  of the initial command DIR after each warm or
  71.           cold boot.
  72.  
  73.           A>movcpm * *
  74.  
  75.           CONSTRUCTING 64K CP/M Vers. 2.2
  76.           READY FOR "SYSGEN" OR
  77.           "SAVE 35 CPM64.COM
  78.           A>save 35 cpm64.com
  79.  
  80.           A>ddt cpm64.com
  81.           DDT VERS 2.2
  82.           NEXT PC
  83.           2400 0100
  84.           -d980
  85.           0980 C3 5C E7 C3 58 E7 7F 00 20 20 20 20 20 20 20 20 ...X...
  86.           0990 20 20 20 20 20 20 20 20 43 4F 50 59 52 49 47 48         COPYRIGH
  87.           09A0 54 20 28 43 29 20 31 39 37 39 2C 20 44 49 47 49 T (C) 1979, DIGI
  88.           09B0 54 41 4C 20 52 45 53 45 41 52 43 48 20 20 00 00 TAL RESEARCH  ..
  89.           09C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  90.           -s987
  91.           0987 00 3
  92.           0988 20 44
  93.           0989 20 49
  94.           098A 20 52
  95.           098B 20 0
  96.           098C 20 .
  97.           -d980
  98.           0980 C3 5C E7 C3 58 E7 7F 03 44 49 52 00 20 20 20 20 ...X...DIR.
  99.           0990 20 20 20 20 20 20 20 20 43 4F 50 59 52 49 47 48         COPYRIGH
  100.           09A0 54 20 28 43 29 20 31 39 37 39 2C 20 44 49 47 49 T (C) 1979, DIGI
  101.           09B0 54 41 4C 20 52 45 53 45 41 52 43 48 20 20 00 00 TAL RESEARCH  ..
  102.           09C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
  103.           -g0
  104.           A>save 35 cpm64.com
  105.           A>sysgen cpm64.com
  106.  
  107.  
  108.  
  109.           SYSGEN VER 2.0
  110.           DESTINATION DRIVE NAME (OR RETURN TO REBOOT)b
  111.           DESTINATION ON B, THEN TYPE RETURN
  112.           FUNCTION COMPLETE
  113.           DESTINATION DRIVE NAME (OR RETURN TO REBOOT)
  114.  
  115.  
  116.                Licensed  users  are  granted  the  right  to  include  these
  117.           modifications in CP/M software.
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.                                   CP/M   V2.2
  125.                              Application Note 02, 2/20/82
  126.                  Reversing the BACKSPACE and RUBOUT Key Functions and
  127.                          Making RUBOUT Identical to BACKSPACE
  128.  
  129.                          Copyright   1982 by Digital Research
  130.                  CP/M is a registered trademark of Digital Research.
  131.                    DDT and SID are trademarks of Digital Research.
  132.                                 Compiled November 1982
  133.  
  134.  
  135.           Applicable products and version numbers:  CP/M   V2.1 and V2.2
  136.  
  137.           Program:  BDOS
  138.  
  139.                In the following code segment procedures, addresses given are
  140.           hexadecimal  offsets from the base of the CP/M system.  The CCP is
  141.           usually located at 980H but can be located at A00H if a two-sector
  142.           boot is used.
  143.  
  144.                You can assemble the patch for your size memory system.   The
  145.           cpmbase  equals  the BDOS entry point address at locations 6 and 7
  146.           in the base page of memory minus 806H.  You must change this entry
  147.           point  address  when  you load DDT   or SID   .  Under DDT or SID,
  148.           follow the jump at location 5 until an address  is  found  with  a
  149.           least  significant  digit  of  6.  In  the  following example, the
  150.           cpmbase would be E506H-806H or DD00H.
  151.  
  152.  
  153.                   0005  JMP  CD00
  154.                   CD00  JMP  D3A4
  155.                   D3A4  XTHL
  156.                   D3A5  SHLD E452
  157.                   D3A8  XTHL
  158.                   D3A9  JMP  E506
  159.  
  160.  
  161.           Procedure to reverse the BACKSPACE and RUBOUT key functions:
  162.  
  163.                Patch into the SYSGEN or MOVCPM image exactly  as  you  would
  164.           patch  in  a  new  version  of  your BIOS, using the DDT i command
  165.           followed by the DDT r command.  You can use  the  same  offset  as
  166.           your custom BIOS and install the following code:
  167.  
  168.  
  169.           cpmbase equ      ?        ;subtrack 806h from address at location 6
  170.  
  171.                   org      cpmbase + 0A02h
  172.  
  173.                   cpi      7fh      ;was cpi 08h
  174.  
  175.                   org      cpmbase + 0A16h
  176.  
  177.                   cpi      08h      ;was cpi 7fh
  178.  
  179.                Or, you can install the above procedure directly into  MOVCPM
  180.           if  you have MOVCPM.COM on your system disk.  The patch is applied
  181.           automatically to any size system  that  you  build  using  MOVCPM.
  182.           Make  a  back-up  copy  of MOVCPM.COM before using DDT to make the
  183.           following changes:
  184.  
  185.  
  186.                   A>ddt movcpm.com
  187.                   DDT VERS 2.2
  188.                   NEXT  PC
  189.                   2700 0100
  190.                   -l1402
  191.                   1402  CPI  08
  192.                   1404  JNZ  0A16
  193.                   1407  MOV  A,B
  194.                   1408  ORA  A
  195.                   1409  JZ   09EF
  196.                   140C  DCR  B
  197.                   140D  LDA  0B0C
  198.                   1410  STA  0B0A
  199.                   1413  JMP  0A70
  200.                   1416  CPI  7F
  201.                   1418  JNZ  0A26
  202.                   -s1403
  203.                   1403 08 7f
  204.                   1404 C2 .
  205.                   -s1417
  206.                   1417 7f 8
  207.                   1418 C2 .
  208.                   -g0
  209.  
  210.                   A>save 38 movcpm1.com
  211.  
  212.  
  213.                Use the new program MOVCPM1.COM in place of MOVCPM.COM.   The
  214.           BACKSPACE  and  RUBOUT  key  functions  are  reversed for any CP/M
  215.           system generated with MOVCPM1.COM.
  216.  
  217.           Procedure to make RUBOUT identical to BACKSPACE:
  218.  
  219.                Before you install this patch, the code at  cpmbase  +  0A1Bh
  220.           should read:
  221.  
  222.                   mov      a,b
  223.                   ora      a
  224.                   jz       cpmbase + 09EFh
  225.                   mov      a,m
  226.                   dcr      b
  227.                   dcx      h
  228.                   jmp      cpmbase + 0AA9h
  229.  
  230.  
  231.  
  232.  
  233.                Patch into the SYSGEN or MOVCPM image exactly  as  you  would
  234.           patch  in  a  new  version  of  your BIOS, using the DDT i command
  235.           followed by the DDT r command.  Use the same offset as your custom
  236.           BIOS and install the following code:
  237.  
  238.  
  239.                   cpmbase equ      ?
  240.                   ;
  241.                   ;
  242.                           org      cpmbase + 0A1Bh
  243.                   ;
  244.                           mvi      a,8h
  245.                           jmp      cpmbase + 0A07h
  246.                           end
  247.  
  248.  
  249.                Or, you can install the above procedure directly into  MOVCPM
  250.           if  you  have  MOVCPM.COM  on  your  system  disk.  The  patch  is
  251.           installed automatically in any size system that  you  build  using
  252.           MOVCPM.  Make  a  back-up  copy  of MOVCPM.COM before using DDT to
  253.           make the following changes.
  254.  
  255.                     A>ddt movcpm.com
  256.                     DDT VERS 2.2
  257.                     NEXT  PC
  258.                     2700 0100
  259.                     -l141b
  260.                     141B  MOV  A,B
  261.                     141C  ORA  A
  262.                     141D  JZ   09EF
  263.                     1420  MOV  A,M
  264.                     1421  DCR  B
  265.                     . . .
  266.  
  267.                     -a141b
  268.                     141B mvi a,8
  269.                     141D jmp a07
  270.                     1420 .
  271.                     -g0
  272.  
  273.                     A>save 38 movcpm1.com
  274.  
  275.  
  276.                Use the new program MOVCPM1.COM in place of MOVCPM.COM.   The
  277.           RUBOUT  and  BACKSPACE  key  functions  are  identical in any CP/M
  278.           system generated with MOVCPM1.COM.
  279.  
  280.                Licensed  users  are  granted  the  right  to  include  these
  281.           modifications in CP/M V2.2 software.
  282.  
  283.  
  284.  
  285.  
  286.                                        CP/M 2.2
  287.                              Application Note 03, 06/25/81
  288.                         Sample BIOS for a Serial Printer Device
  289.  
  290.                           Copyright   1982 by Digital Research
  291.                   CP/M is a registered trademark of Digital Research.
  292.                                  Compiled November 1982
  293.  
  294.  
  295.  
  296.           Applicable products and version numbers:  CP/M   V1.4,  V2.0,  V2.1,
  297.           and V2.2
  298.  
  299.           Program:  BIOS
  300.  
  301.                The following code  fragment  drives  Diablo  serial  interface
  302.           printers  or  other  serial devices that use the X ON/X OFF protocol
  303.           for synchronization.  A device that uses this protocol receives data
  304.           faster  than  it can print.  The device transmits a CTRL-S character
  305.           when its buffer becomes full, and a  CTRL-Q  to  receive  more  data
  306.           after the buffer is emptied.
  307.  
  308.  
  309.                 LIST$STAT EQU 00H
  310.                 LIST$DATA EQU 01H
  311.                 IN$MASK   EQU 02H
  312.                 OUT$MASK  EQU 01H
  313.  
  314.                 LIST:
  315.                          CALL LISTST ! JZ LIST
  316.                          MOV A,C ! OUT LIST$DATA
  317.                          RET
  318.                 LISTST
  319.                          ;return list status (0 if not ready, FF if ready)
  320.                          LXI H,LST$FLAG
  321.                          IN LIST$STAT ! ANI INS$MASK ! JZ NO$INPUT
  322.                          IN LIST$DATA ! ANI 7FH ! CPI 'Q'-'@' ! JNZ S?
  323.                          MVI M OFFH
  324.                 S?       CPI 'S'-'@' ! JNZ NO$INPUT
  325.                          MVI M,O
  326.                 NO$INPUT:
  327.                          IN LIST$STAT ! ANI OUT$MASK ! ANA M ! RZ
  328.                          ORI 255
  329.                          RET
  330.                 LST$FLAG:
  331.                          DB     255     ;must be 255 initially
  332.  
  333.  
  334.                Licensed  users  are  granted  the  right  to   include   these
  335.           modifications in CP/M software.
  336.  
  337.  
  338.  
  339.  
  340.                                        CP/M   V2.2
  341.                               Application Note 04, 2/20/82 
  342.                              BIOS Error Return Code Options
  343.  
  344.                            Copyright  1982 by Digital Research
  345.                   CP/M is a registered trademark of Digital Trademark.
  346.                      DDT and SID are trademarks of Digital Research.
  347.                                  Compiled November 1982
  348.  
  349.  
  350.  
  351.           Applicable products and version numbers:   CP/M   V2.2
  352.  
  353.           Program:  BIOS
  354.  
  355.                Usually, CP/M responds only to a zero or nonzero  value  as  the
  356.           return  code from the BIOS READ and WRITE entry points.  If the value
  357.           in register A is zero, CP/M  assumes  that  the  disk  operation  was
  358.           completed  successfully.  If  a  nonzero  value is in register A, the
  359.           BDOS returns the message BDOS ERR ON x: BAD SECTOR.   You  then  have
  360.           the  option of pressing the RETURN key to ignore the error, or CTRL-C
  361.           to abort.
  362.  
  363.                This modification interjects three additional return  codes  for
  364.           the BIOS READ and WRITE routines in register A as shown below.
  365.  
  366.  
  367.                0    The disk Read or Write operation was successful.
  368.                1    Bad Sector--indicates permanent disk error.
  369.                2    Select Error--indicates the drive is not ready.
  370.                3    R/O--the disk is Read-Only (used by WRITE).
  371.                4    File R/O--not normally used.
  372.  
  373.  
  374.                In the following code segment, addresses given  are  hexadecimal
  375.           offsets from the base of the CP/M system.  The CCP is usually located
  376.           at 980H, but can be located at A00H if you use a two-sector boot.
  377.  
  378.                After modifying your BIOS READ and WRITE routines  to  pass  the
  379.           extended error codes to the BDOS, you can assemble the BDOS patch for
  380.           your size memory system.  The cpmbase equals  the  BDOS  entry  point
  381.           address  at  locations 6 and 7 in the base page of memory minus 806H.
  382.           You must change this  entry point  address when  you  load  DDT    or
  383.           SID    .  Under  DDT  or SID, follow the jump at location 5 until you
  384.           find an address  with  a  least  significant  digit  of  6.   In  the
  385.           following example, the cpmbase would be E506H-806H or DD00H.
  386.  
  387.  
  388.                   0005  JMP  CD00
  389.                   CD00  JMP  D3A4
  390.                   D3A4  XTHL
  391.                   D3A5  SHLD E452
  392.                   D3A8  XTHL
  393.                   D3A9  JMP  E506
  394.                                           1
  395.           CP/M V2.2                                     Application Note 04
  396.  
  397.  
  398.                Patch into the SYSGEN or MOVCPM image exactly as you would patch
  399.           in  a  new  version of your BIOS, using the DDT i command followed by
  400.           the DDT r command.  Use the same offset as your custom BIOS.
  401.  
  402.                Before installing this patch, the code at  the  cpmbase  +  BBDh
  403.           should read:
  404.  
  405.                   lxi     h,cpmbase +809H
  406.                   jmp     cpmbase + B4AH
  407.  
  408.           Replace the preceding code with the following code:
  409.  
  410.                   cpmbase equ     ?
  411.                   ;
  412.                   ;
  413.                           org     cpmbase + BBDH
  414.                   ;
  415.                           lxi     h,cpmbase + 807H
  416.                           jmp     cpmbase + 83AH
  417.                           end
  418.  
  419.                Or, you  can  install  this  change  directly  into  MOVCPM,  if
  420.           MOVCPM.COM  is  on  your  system disk.  The patch is installed in any
  421.           size system that you build using MOVCPM.   Make  a  back-up  copy  of
  422.           MOVCPM.COM before using DDT to install the following procedure:
  423.  
  424.                     A>ddt movcpm.com
  425.                     DDT VERS 2.2
  426.                     NEXT  PC
  427.                     2700 0100
  428.                     -l15bd
  429.                     15BD  LXI  H,0809
  430.                     15C0  JMP  0B4A
  431.                     15C3  LHLD 15EA
  432.                     . . .
  433.  
  434.                     -a15bd
  435.                     15BD lxi h,807
  436.                     15C0 jmp 83a
  437.                     15C3 .
  438.                     -g0
  439.  
  440.                     A>save 38 movcpm1.com
  441.  
  442.  
  443.                Use  the  new  program  MOVCPM1.COM  in  place  of   MOVCPM.COM.
  444.           Additional  error  return  codes for the BIOS READ and WRITE routines
  445.           are supported in any CP/M system generated with MOVCPM1.COM.
  446.  
  447.                Licensed  users  are  granted  the  right   to   include   these
  448.           modifications in CP/M V2.2 software.
  449.                                           2
  450.                                       CP/M   V2.2
  451.                               Application Note 05, 2/20/82
  452.                               Improving the CTRL-S Function
  453.  
  454.                           Copyright   1982 by Digital Research
  455.                    CP/M is a registered trademark of Digital Research.
  456.                      DDT and SID are trademarks of Digital Research.
  457.                                  Compiled November 1982
  458.  
  459.           Applicable products and version numbers:  CP/M   V2.2
  460.  
  461.           Program:  BDOS
  462.  
  463.                The CTRL-S function controls screen scrolling during CRT output.
  464.           However,  the  system  does  not recognize CTRL-S if you type another
  465.           character before it.
  466.  
  467.                In the following code segment procedures,  addresses  given  are
  468.           hexadecimal  offsets  from  the  base of the CP/M system.  The CCP is
  469.           usually located at 980H, but can be located at A00H if  a  two-sector
  470.           boot is used.
  471.  
  472.                You can assemble the patch for your  size  memory  system.   The
  473.           cpmbase  equals  the BDOS entry point address at locations 6 and 7 in
  474.           the base page of memory minus 806H.  You must change this entry point
  475.           address  when you load DDT   or SID   .  Under DDT or SID, follow the
  476.           jump at location 5 until you find an address with a least significant
  477.           digit  of  6.  In the following example, the cpmbase is E506H-806H or
  478.           DD00H.
  479.  
  480.                   0005  JMP  CD00
  481.                   CD00  JMP  D3A4
  482.                   D3A4  XTHL
  483.                   D3A5  SHLD E452
  484.                   D3A8  XTHL
  485.                   D3A9  JMP  E506
  486.  
  487.                Patch into the SYSGEN or MOVCPM image exactly as you would patch
  488.           in  a  new  version of your BIOS, using the DDT i command followed by
  489.           the DDT r command.  Use the same offset as  your  custom  BIOS.   The
  490.           call at cpmbase + 950H should be cpmbase + 923H before installing the
  491.           following code:
  492.  
  493.                   cpmbase equ     ?
  494.                   ;
  495.                   ;
  496.                           org     cpmbase + 950h
  497.                   ;
  498.                           call    cpmbase + 92Ah
  499.                           end
  500.  
  501.  
  502.                                    1
  503.  
  504.  
  505.           CP/M V2.2                                     Application Note 05
  506.  
  507.  
  508.                Or, you can install the above procedure directly into MOVCPM, if
  509.           MOVCPM.COM   is   on   your   system   disk.  The  patch  is  applied
  510.           automatically to any size system that you build using MOVCPM.
  511.  
  512.                Make a back-up copy of MOVCPM.COM before using DDT to  make  the
  513.           following changes:
  514.  
  515.  
  516.                     A>ddt movcpm.com
  517.                     DDT VERS 2.2
  518.                     NEXT  PC
  519.                     2700 0100
  520.                     -l1350
  521.                     1350  CALL 0923
  522.                     1353  POP  B
  523.                     1354  PUSH B
  524.                     . . .
  525.  
  526.                     -a1350
  527.                     1350 call 92a
  528.                     1353 .
  529.                     -g0
  530.  
  531.                     A>save 38 movcpm1.com
  532.  
  533.  
  534.                Use the new program MOVCPM1.COM in  place  of  MOVCPM.COM.   Any
  535.           CP/M  system  generated  with  MOVCPM1.COM  has  the  improved CTRL-S
  536.           function.
  537.  
  538.                Licensed  users  are  granted  the  right   to   include   these
  539.           modifications in CP/M V2.2 software.
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.                                           2
  555.                                        CP/M   V2.2
  556.                               Application Note 06, 2/20/82
  557.                                Changing the Lines Per Page
  558.  
  559.                           Copyright   1982 by Digital Research
  560.                    CP/M is a registered trademark of Digital Research.
  561.                          DDT is a trademark of Digital Research.
  562.                                  Compiled November 1982
  563.  
  564.           Applicable products and version numbers:  CP/M V2.2 and V2.2 4200H
  565.  
  566.           Program:  ED.COM
  567.  
  568.                This modification changes the number of lines scrolled by the  P
  569.           command  in  ED.COM  from  23 to 14.  Add 4200H to each address shown
  570.           below for 4200H-based systems.  Make a back-up copy of ED.COM  before
  571.           you use DDT   to make the following changes:
  572.  
  573.                     A>ddt ed.com
  574.                     DDT VERS 2.2
  575.                     NEXT  PC
  576.                     1B00 0100
  577.                     -l17da
  578.                     17DA  LXI  H,0017
  579.                     17DD  SHLD 1D1C
  580.                     17E0  RET
  581.                       .
  582.                       .
  583.                       .
  584.  
  585.                     -s17db
  586.                     17DB 17 e
  587.                     17DC 00 .
  588.                     -^C
  589.                     A>save 26 ed.com
  590.  
  591.                Licensed  users  are  granted  the  right   to   include   these
  592.           modifications in CP/M V2.2 and V2.2 4200H software.
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.  
  605.                                        1
  606.                                        CP/M   V2.2
  607.                               Application Note 07, 2/20/82
  608.                            Changing the Restart Number in DDT
  609.  
  610.                           Copyright   1982 by Digital Research
  611.                    CP/M is a registered trademark of Digital Research.
  612.                          DDT is a trademark of Digital Research.
  613.                                  Compiled November 1982
  614.  
  615.           Applicable products and version numbers:  CP/M    V1.4,  V2.0,  V2.1,
  616.           and V2.2
  617.  
  618.           Program:  DDT.COM
  619.  
  620.                DDT   uses RST 7 (machine instruction 0FFH) to set break points.
  621.           To  change the restart number, modify the three bytes indicated by ??
  622.           in  the  following  procedure  for  a  new  restart  instruction  and
  623.           location.  The  restart  instruction  uses  the bit pattern 11XXX111,
  624.           where XXX is the restart number you use.  (AFH is RST 1, B7H  is  RST
  625.           2,  and  BFH  is RST 3.)  The restart location is usually the restart
  626.           number times 8.  Do not use RST 0 because it is reserved for CP/M.
  627.  
  628.                The following procedure applies to DDT supplied with  CP/M  V2.1
  629.           and  V2.2.  For V1.4 and V2.0, change the instructions at 19B and 19E
  630.           to the following:
  631.  
  632.                   019B  sta  fe4
  633.                   019E  sta  10ee
  634.  
  635.                Make a back-up copy of DDT.COM before you use DDT  to  make  the
  636.           following changes:
  637.  
  638.                   A>ddt ddt.com
  639.                   DDT VERS 2.2
  640.                   NEXT  PC
  641.                   1400 0100
  642.                   -l103
  643.                     103  JMP  013D
  644.                           .
  645.                           .
  646.                           .
  647.                   -a103
  648.                   0103  jmp  18b
  649.                   -a18b
  650.                   018B  lhld 1ec
  651.                   018E  shld 8e7
  652.                   0191  inx  h
  653.                   0192  shld 8ed
  654.                   0195  lda  1eb
  655.                   0198  sta  ad5
  656.  
  657.  
  658.  
  659.                                           1
  660.  
  661.           CP/M V2.2                                     Application Note 07
  662.  
  663.  
  664.                   019B  sta  fea
  665.                   019E  sta  10f4
  666.  
  667.  
  668.                   01A1  jmp  13d
  669.                   - s1ec
  670.                   01EB ?? f7
  671.                   01EC ?? 30
  672.                   01ED ?? 00
  673.                   01EE ?? .
  674.                   -g0
  675.                   A>save 19 ddt6.com
  676.  
  677.  
  678.                To change the restart number for DDT in the future, modify  only
  679.           the 3 bytes 1EBH, 1ECH and 1EDH.
  680.  
  681.                Licensed  users  are  granted  the  right   to   include   these
  682.           modifications in CP/M software.
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.                                          2
  708.  
  709.                                        CP/M   V2.2
  710.                               Application Note 08, 2/20/82
  711.                                    Nested SUBMIT Files
  712.  
  713.                            Copyright  1982 by Digital Research
  714.                    CP/M is a registered trademark of Digital Research.
  715.                          DDT is a trademark of Digital Research.
  716.                                  Compiled November 1982
  717.  
  718.           Applicable products and version numbers:  CP/M   V2.1 and V2.2
  719.  
  720.           Program:  SUBMIT.COM
  721.  
  722.                The CP/M SUBMIT program  allows  you  to  embed  another  SUBMIT
  723.           command  within  a  submit file.  However, control does not return to
  724.           the original SUBMIT file after executing the nested  SUBMIT  command.
  725.           To  return  control  to the original SUBMIT command, use any standard
  726.           editor  to  type  the  following  procedure   into   a   file   named
  727.           SUBPATCH.ASM:
  728.  
  729.              ;
  730.              ;
  731.              subfcb: equ     5bbh
  732.              bdos:   equ     5
  733.              open:   equ     211h
  734.              ;
  735.                      org     22dh             ;submit erase subroutine
  736.              ;
  737.              opsl:   lda     subfcb+15        ;file open ok if ext not full
  738.                      ral
  739.                      rnc
  740.                      lxi     h,subfcb+12      ;try next extent
  741.                      inr     m
  742.              ops:    lxi     d,subfcb         ;open extent
  743.                      jmp     create
  744.              ;
  745.                      org     25dh             ;submit create subroutine
  746.              create: call    open
  747.                      inr     a
  748.                      jnz     opsl             ;loop if open ok
  749.                      lxi     d,subfcb
  750.                      mvi     c,22
  751.                      call    bdos
  752.                      adi     1
  753.                      ret
  754.              ;
  755.              ;       the following code calls the above routines
  756.              ;
  757.                      org     4feh
  758.              ;
  759.                      call    ops              ;open the $$$.sub file
  760.                      jc      517h             ;jump if not opened ok
  761.                      lda     subfcb+15        ;set current record to end
  762.                      sta     subfcb+32
  763.                      jmp     51dh             ;jump if open ok
  764.              ;
  765.                      org     subfcb
  766.                      db      1                ;force $$$.sub file to A:
  767.              ;
  768.                      end
  769.  
  770.  
  771.                Assemble SUBPATCH ASM to create the file SUBPATCH.HEX.  Then use
  772.           DDT  to  insert  SUBPATCH.HEX  into  the SUBMIT.COM program, as shown
  773.           below.
  774.  
  775.                     A>ddt submit.com
  776.                     DDT VERS 2.2
  777.                     NEXT  PC
  778.                     0600 0100
  779.                     -isubpatch.hex
  780.                     -r
  781.                     -g0
  782.                     A>save 5 submit1.com
  783.  
  784.  
  785.                In the new program SUBMIT1.COM, control returns to the  original
  786.           SUBMIT file after the system executes embedded SUBMIT commands.
  787.  
  788.                Licensed  users  are  granted  the  right   to   include   these
  789.           modifications in CP/M V2.1 and V2.2 software.
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.                                        CP/M   V2.2
  797.                               Application Note 09, 2/02/82
  798.                           Configuring CP/M for Page Boundaries
  799.  
  800.                            Copyright  1982 by Digital Research
  801.                    CP/M is a registered trademark of Digital Research.
  802.                          DDT is a trademark of Digital Research.
  803.                                  Compiled November 1982
  804.  
  805.           Applicable products and version numbers:  CP/M   V2.2
  806.  
  807.           Program:  MOVCPM.COM
  808.  
  809.                You can modify  MOVCPM.COM  to  configure  CP/M  V2.2  for  page
  810.           boundaries (256 bytes) instead of kilobyte boundaries.
  811.  
  812.                Make a back-up copy of MOVCPM.COM before you use DDT    to  make
  813.           the  following  changes.  Save  the  changes  in  a  new  file  named
  814.           PGMOV.COM.  The first argument designates the size of the  system  in
  815.           pages  that  PGMOV  is to construct.  The first argument is optional,
  816.           but must range between 64 and 255 (decimal) if used.
  817.  
  818.                     A>ddt movcpm.com
  819.                     DDT VERS 2.2
  820.                     NEXT  PC
  821.                     2700 0100
  822.                     -l165
  823.                     0165  CPI  10
  824.                     0167  JC   0172
  825.                     016A  MVI  L,00
  826.                     016C  MOV  H,A
  827.                     016D  DAD  H
  828.                     -s166
  829.                     0166 10 40
  830.                     0167 DA .
  831.                     -a16d
  832.                     016D nop
  833.                     016E nop
  834.                     016F .
  835.                     -l1a2
  836.                     01A2  ANI  FC
  837.                     01A4  MOV  H,A
  838.                     01A5  PUSH H
  839.                     01A6  LHLD 0006
  840.                     -ala2
  841.                     01A2 ani fe
  842.                     01A4 .
  843.                     -g0
  844.                     A>save 38 pgmov.com
  845.  
  846.                Licensed  users  are  granted  the  right   to   include   these
  847.           modifications in CP/M V2.2 software.
  848.  
  849.  
  850.  
  851.                                        CP/M   V2.2
  852.                            Application Note 10, BDOS, 03/12/82
  853.                         Booting CP/M on Drives Other Than Drive A
  854.  
  855.                           Copyright   1982 by Digital Research
  856.                    CP/M is a registered trademark of Digital Research.
  857.                          DDT is a trademark of Digital Research.
  858.                                  Compiled November 1982
  859.  
  860.           Applicable products and version numbers:  CP/M   V2.2
  861.  
  862.           Module:  BDOS
  863.  
  864.                Booting CP/M on a drive other than drive A changes  the  initial
  865.           prompt  displayed after a cold boot.  Instead of A>, you must specify
  866.           the drive intended to follow the cold boot  in  the  following  patch
  867.           procedure.  Also,  your  BIOS  must  pass  the intended boot drive to
  868.           register C in the CCP upon cold boots (see the CP/M Operating  System
  869.           Manual).  The intended boot drive in this patch procedure and in your
  870.           BIOS is indicated by a number relative to zero.  (A=0, B=1, C=2, ...,
  871.           P=15.)  This procedure changes the drive selected by BDOS Function 13
  872.           (Reset Disk System).
  873.  
  874.                Use  caution  installing  this   patch   because   it   requires
  875.           modification  to the CP/M submit processor (SUBMIT.COM).  SUBMIT must
  876.           write the $$$.SUB file to the boot drive you specify in  this  patch.
  877.           The  procedure  to modify SUBMIT is described in CP/M V2.2, Patch 03,
  878.           dated 1/21/82.  Instead  of  setting  the  byte  at  5BBH  to  1,  as
  879.           described  in Patch 03, set the byte to the specified boot drive plus
  880.           1.  For example, if the boot drive is 1 (the B drive), then  set  the
  881.             byte in SUBMIT.COM at 5BBH to 2.
  882.  
  883.                Place the following code in a file named CPMxx.COM (xx =  memory
  884.           size).  Determine  the  CP/M base for your size memory and include it
  885.           in the code.  Assemble and insert CPMxx.COM into the SYSGEN or MOVCPM
  886.           image  exactly as you would patch in a new version of your BIOS.  Use
  887.           the DDT   i command followed by the DDT  r  command.   Use  the  same
  888.           offset  as your custom BIOS.  Make a back-up copy of CPMxx.COM before
  889.           you make the changes.
  890.  
  891.  
  892.                   cpmbase equ     ?
  893.                   drive   equ     ?       ;boot drive
  894.                                           ;0=A, 1=B, ..., 15=P
  895.  
  896.                           org     cpmbase + 0148Ch
  897.  
  898.                           jmp     cpmbase + 15EEh         ;was "xra a"
  899.  
  900.                           org     cpmbase + 15EEh
  901.                           mvi     a,drive                 ;was "nop"
  902.                           sta     cpmbase + 0B42h         ;was "nop"
  903.                           jmp     cpmbase + 1490h         ;was "nop"
  904.  
  905.  
  906.                Licensed users are granted the right to include these changes in
  907.           CP/M V2.2 software.
  908.  
  909.  
  910.  
  911.                                       CP/M   V2.2
  912.                               Application Note 11 9/30/82
  913.                                    Chaining Programs
  914.  
  915.                           Copyright   1982 by Digital Research
  916.              CP/M and CP/NET are registered trademarks of Digital Research.
  917.                 MP/M II and PL/I-80 are trademarks of Digital Research.
  918.                                  Compiled October 1982
  919.  
  920.           Applicable products and version numbers:  CP/M    V2.2,  CP/NET    ,
  921.           and MP/M II   .
  922.  
  923.           Program:  CHAIN1.COM and CHAIN2.COM
  924.  
  925.                 Menu-driven applications can be written to  run  under  CP/M.
  926.           If  you  develop  applications  using  PL/I-80   , you can write the
  927.           programs as a set of overlays.  Often, the programs are  written  in
  928.           assembly  language,  or  require too much memory to make the overlay
  929.           feature of PL/I-80 appropriate.  Without using overlays,  there  are
  930.           only two effective methods of chaining under CP/M V2.2.
  931.  
  932.                 The first method uses the CP/M SUBMIT facility, in which  the
  933.           main  menu  program creates a SUBMIT file that lists the programs to
  934.           be chained.  The file must be written to drive A, and have the  name
  935.           $$$.SUB.
  936.  
  937.                 The SUBMIT file consists of compatible  lines,  exactly  like
  938.           those  you  type  at  the console, following the system prompt.  The
  939.           commands are placed in reverse order, so the  last  command  in  the
  940.           file  is the first to be executed.  Each command is placed in a 128-
  941.           byte record with the following format:
  942.  
  943.                   :n:C1:C2:...:cn:0:...:
  944.  
  945.                 The  first  byte  of  the  record  contains  the  number   of
  946.           characters  in  the command (n), followed by the characters (c1-cn),
  947.           and terminated with a zero.  The number of characters in the command
  948.           is  written  as a binary number and each character is represented in
  949.           ASCII format.  It does not matter what follows the terminating  zero
  950.           in  the  record.  For example, if the command was STAT*.*, the first
  951.           byte would be a binary  8,  followed  by  the  letters  STAT*.*  and
  952.           terminated with a zero.
  953.  
  954.                 The second  method  of  program  chaining  is  simpler.   You
  955.           include  a procedure in the menu program that loads the next program
  956.           and chains to it.  Each program that might chain to another  program
  957.           must include a copy of the procedure.  The procedure must first move
  958.           itself out of the way so that it is not overwritten by  the  program
  959.           it is loading.
  960.  
  961.  
  962.  
  963.  
  964.               The example assembly language procedure is  written  to  link
  965.           with  PL/I-80 modules as an external procedure.  It can also be used
  966.           in an assembly language menu program.  To link to a PL/I-80 program,
  967.           the  following  entry  declaration  must  be included in the PL/I-80
  968.           program that does the chaining:
  969.  
  970.                   dcl chain entry (char(12));
  971.  
  972.                 The character 12 variable consists of the standard CP/M  File
  973.           Control  Block (FCB) format.  The format can be created in the PL/I-
  974.           80 program as a structure.  A char(12) variable can then be based at
  975.           the  same  address  as  the  structure  for interfacing to the chain
  976.           procedure.  (See the following PL/I-80 program.)
  977.  
  978.           Note:  the drive is not an ASCII  character,  but  a  binary  number
  979.           between 0 and 16, where 0 is the current default drive and 1 through
  980.           16 represent the CP/M drives A through P, respectively.
  981.  
  982.                   chain 1: proc options(main);
  983.                   /* chain subroutine tester */
  984.                      dcl 1 fcb static
  985.                       2 drive fixed(7) init(0),
  986.                       2 name char(8) init('CHAIN2');
  987.                       2 type char(3) init('COM'),
  988.                      dummy char(12) based(db),
  989.                      dp pointer,
  990.                     chain entry(char(12));
  991.                     put skip list('Chain Text program 1');
  992.                     dp = addr(fcb);
  993.                     call chain(dummy);
  994.                     put skip(2) list('Shouldn''t be here!!);
  995.                   end chain 1;
  996.  
  997.                 This program prints the message Chain  Test  program  1,  and
  998.           chains  to the program CHAIN2.COM on the default drive.  CHAIN2 is a
  999.           program identical to  CHAIN1,  except  that  it  prints  Chain  Test
  1000.           Program 2 and chains to CHAIN1.COM.  CHAIN1 and CHAIN2 then continue
  1001.           to chain back and forth to each other.
  1002.  
  1003.           Note:  any statements following the call to the chain procedure  are
  1004.           not executed because the chain procedure never returns.
  1005.  
  1006.                 The  chain  procedure   consists   of   two   routines.    An
  1007.           initialization  routine  initializes  the  FCB for the program to be
  1008.           loaded.  Then, the initialization routine relocates the  loader  and
  1009.           FCB to the very top of the Transient Program Area (TPA), immediately
  1010.           below the BDOS, so it will not be overwritten by the loaded program.
  1011.           The  loader  begins  at the label, code:, and ends at the end of the
  1012.           FCB, at the statement, codelen equ $-code.
  1013.  
  1014.                 The loader routine sets the  DMA  address,  reads  a  sector,
  1015.           checks  for  an  end-of-file,  increments  the  DMA addresses by 128
  1016.           bytes, and repeats the process.  When the end-of-file  is  detected,
  1017.           it jumps to the chained program.  The code is as follows:
  1018.  
  1019.                       public chain                         char(12)
  1020.                       extrn      ?signal
  1021.                       ,/* loads another COM file, and
  1022.                       executes it */
  1023.           bdos        equ      5
  1024.           openf       equ      15
  1025.           readf       equ      20
  1026.           dmaf        equ      26
  1027.  
  1028.                       cseq
  1029.           chain.      mov e,m ! inx h ! mov d, m ! xchg    ;get first arg address
  1030.                       lxi d, fcb ! mvi c, 12 ! call move   ;move string to FCB
  1031.                       lxi d, fcb+12 ! mvi a, 0 ! mvi c, 21
  1032.                       call fill                            ;zero rest of FCB
  1033.                       lhld bdos+1 ! lxi b, -code$len
  1034.                       dad b                                ;make space at
  1035.                                                            ;top of TPA
  1036.                       shld jmpr + 1                        ;jump address
  1037.                       push h                               ;save code address
  1038.                                                            ;for RET
  1039.                       xchg ! lxi h, fcb-code ! dad d       ;make address of FCB
  1040.                       shld FCBR+1                          ;and fix LXI
  1041.                       push h                               ;save FCB
  1042.                                                            ;destination address
  1043.  
  1044.                       lxi h, code ! mvi c, code$len
  1045.                       call move                            ;dest in DE
  1046.                       pop d                                ;recover address of FCB
  1047.                       mvi c, openf ! call BDOS             ;open file
  1048.                       inr a ! jz sig                       ;if any error,
  1049.                                                            ;signal error
  1050.                       pop h ! sphl ! push h                ;point stack to top
  1051.                                                            ;of TPA
  1052.                                                            ;and save code addr
  1053.                       lxi h, 100h                          ;point to start of
  1054.                                                            ;TPA
  1055.                       ret                                  ;to loader "code"
  1056.  
  1057.           code:       push h ! xchg ! mvi c, dmaf
  1058.                       call BDOS                            ;set the DMA address
  1059.  
  1060.           FCBR        lxi d, $-$ ! mvi c, readf !
  1061.                       call BDOS                            ;read the next record
  1062.                       ora a ! jnz 100h                     ;EOF -| start TPA
  1063.                       pop h ! lxi d, 128 ! dad D           ;recover and bump DMA
  1064.  
  1065.           jmpr        jmp $-$                              ;jump to code
  1066.           FCB:        ds       1                           ;drive code
  1067.           CP/M V2.2                                     Application Note 11
  1068.  
  1069.                       ds       8                           ;filename
  1070.                       ds       3                           ;filetype
  1071.                       ds       4                           ;control info
  1072.                       ds       16                          ;disk map
  1073.                      ds       1                           ;rrec
  1074.           codelen     equ      $-code
  1075.  
  1076.           move:       ;c = # bytes, hi = source, de = desti-
  1077.                       nation
  1078.                       mov a,m ! stax d
  1079.                       inx h ! inx d ! dcr c
  1080.                       jnz move
  1081.                       ret
  1082.  
  1083.           fill:       ;a = byte to fill, c = # bytes, de = start ad-
  1084.                       dress
  1085.                       stax d ! inx d
  1086.                       dcr c ! jnz fill
  1087.                       ret
  1088.           sig:        lxi h, siglist ! call ?signal ! jmp 0;signal error
  1089.           siglist:                                         ;(fixed(6),
  1090.                                                            ;bit(8),ptr,ptr)
  1091.                       dw sigcode, sigsub, sigfil, message
  1092.           sigcode     db      6                            ;undefined file
  1093.                                                            ;error
  1094.           sigsub      db      2                            ;arbitrary subcode
  1095.                                                            ;for id
  1096.           sigfil      dw     fpb                           ;ptr to file
  1097.                                                            ;parameter block
  1098.           message     dw     quack                         ;auxiliary
  1099.                                                            ;operator message
  1100.  
  1101.           fpb                                              ;PL/I fuke
  1102.                                                            ;oaraneter bkicj
  1103.           fcbptr      dw     FCB-1                         ;fcb-1
  1104.           fpblst      dw      0                            ;(unused)ptr
  1105.           column      dw      0                            ;current column
  1106.                                                            ;fixed(15)
  1107.           curline     dw      0                            ;current line
  1108.                                                            ;fixed(15)
  1109.           curpage     dw      0                            ;current page
  1110.                                                            ;fixed(15)
  1111.           currec      dw      0                            ;(unused)fixed(15)
  1112.           lookchr     db      0                            ;look ahead char
  1113.                                                            ;char(1)
  1114.           ioend       dw      0                            ;i/o end address
  1115.           iostk       dw      0                            ;user stack upon
  1116.                                                            ;sio entry
  1117.           spacer      ds      4                            ;spacer
  1118.           linesz      dw      0                            ;line size
  1119.                                                            ;fixed(15)
  1120.           pagesz      dw      0                            ;page size
  1121.                                                            ;fixed(15)
  1122.           fixedsz     dw      0                            ;fixed size
  1123.                                                            ;fixed(15)
  1124.           blocksz     dw      0                            ;block size
  1125.                                                            ;fixed(15)
  1126.           filedes     dw      0                            ;block size
  1127.                                                            ;fixed(15)
  1128.           dtitle      db      0                            ;default title
  1129.                                                            ;char(14)varying
  1130.           quack       db      17,'Bad Chain Attempt',0     ;error message
  1131.  
  1132.  
  1133.  
  1134.                 Licensed  users  are  granted  the  right  to  include  these
  1135.           modifications in CP/M, CP/NET and MP/M II software.
  1136.  
  1137.  
  1138.  
  1139.  
  1140.  
  1141.                                    CP/M   V2.2
  1142.                               Application Note 12, 11/1/82
  1143.                           Interpreting  CTRL-Z in SUBMIT Files
  1144.  
  1145.                           Copyright   1982 by Digital Research
  1146.                    CP/M is a registered trademark of Digital Research.
  1147.                          DDT is a trademark of Digital Research.
  1148.                                  Compiled November 1982
  1149.  
  1150.           Applicable products and version numbers:  CP/M  V2.2
  1151.  
  1152.           Program:  SUBMIT.COM
  1153.  
  1154.                SUBMIT does not accept control characters in SUB files.   SUBMIT
  1155.           recognizes  certain  control characters when preceded by an up arrow.
  1156.           SUBMIT should interpret the two characters ^z as CTRL-Z.
  1157.  
  1158.           Procedure:
  1159.  
  1160.                Make a back-up copy of SUBMIT.COM before you use DDT    to  make
  1161.           the following changes.
  1162.  
  1163.  
  1164.                   A>ddt submit.com
  1165.                   DDT V2.2
  1166.                   NEXT PC
  1167.                   0600 0100
  1168.                   -l0441
  1169.                   0441  SUI  61
  1170.                   0443  STA  0E7D
  1171.                   0446  MOV  C,A
  1172.                   0447  MVI  A,19
  1173.                   0449  CMP  C
  1174.                   044A  JNC  0456
  1175.                   044D  LXI  B,019D
  1176.                   0450  CALL 02A7
  1177.                   045  JMP  045E
  1178.                   0456  LDA  0E7D
  1179.                   0459  INR  A
  1180.                   -s442
  1181.                   0442 61 41
  1182.                   0443 32 .
  1183.                   -g0
  1184.  
  1185.                   A>save 5 submit.com
  1186.  
  1187.  
  1188.                Licensed users are granted the right to include these changes in
  1189.           CP/M V2.2 software.
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.                                      CP/M   V2.2
  1196.                             Application Note 13, 01/21/82
  1197.                         Exiting PIP When Using SUBMIT and XSUB
  1198.  
  1199.                          Copyright   1982 by Digital Research
  1200.                  CP/M is a registered trademark of Digital Research.
  1201.                        DDT is a trademark of Digital Research.
  1202.                                 Compiled November 1982
  1203.  
  1204.           Applicable products and version numbers:  CP/M   V2.2
  1205.  
  1206.           Program:  PIP.COM
  1207.  
  1208.                When using the SUBMIT and XSUB utilities to execute  multiple
  1209.           PIP  commands  from a SUBMIT file, it is not possible to exit from
  1210.           PIP automatically.   The SUBMIT utility does not accept lines with
  1211.           only a carriage return.
  1212.  
  1213.                This application note patch modifies PIP so a period  can  be
  1214.           used to exit from PIP instead of a carriage return.  In the submit
  1215.           file, place a single period (.) on a line by itself after the last
  1216.           PIP command to be executed.
  1217.  
  1218.           Procedure:
  1219.  
  1220.                Make a back-up copy of PIP.COM before you make  any  changes.
  1221.           The  program  DDT    is  required  to  make  the changes.  Use the
  1222.           following sequence of commands.
  1223.  
  1224.                   0A>ddt pip.com
  1225.                   DDT VERS 2.2
  1226.                   NEXT  PC
  1227.                   1E00 0100
  1228.                   -l54f
  1229.                   054F  CPI 00
  1230.                   0551  JNZ 055E
  1231.                   0554  LHLD 1DFC
  1232.                    . . .
  1233.                   -a54f
  1234.                   054F  cpi 2
  1235.                   0551  jnc 55e
  1236.                   0554  .
  1237.                   -g0
  1238.  
  1239.                   A>save 29 pip.com
  1240.  
  1241.  
  1242.                Licensed users are granted the right to include these changes
  1243.           in CP/M 2.2 software.
  1244.  
  1245.  
  1246.  
  1247.  
  1248.                                       CP/M   V2.2
  1249.                               Application Note 14, 8/11/82
  1250.              Turning CTRL-P On and Off from within a CP/M V2.2 SUBMIT File
  1251.  
  1252.                           Copyright   1982 by Digital Research
  1253.                   CP/M is a registered trademark of Digital Research.
  1254.                                  Compiled November 1982
  1255.  
  1256.           Applicable products and version numbers:  CP/M   V2.2
  1257.  
  1258.                You can use the SUBMIT facility for  batching  job  streams  to
  1259.           turn  the  CTRL-P  toggle  on  and off from within that SUBMIT file.
  1260.           Although there is a patch to SUBMIT that forces it to accept control
  1261.           characters when preceded by an up-arrow, ^, SUBMIT does not act on a
  1262.           CTRL-C nor a CTRL-P.
  1263.  
  1264.                The assembly-language program which follows turns CTRL-P on  or
  1265.           off  from  within a SUBMIT file.  The same assembly code can be used
  1266.           from within an applications program to turn CTRL-P on and off.  This
  1267.           program must be executed before XSUB, if XSUB is to be active in the
  1268.           SUBMIT file.  Although the CP/M V2.2 Operating System Manual states,
  1269.           "The  XSUB  command  is  included  as  the first line of your submit
  1270.           file...,"  this  is  not  necessary.   XSUB  can  be  activated  and
  1271.           deactivated  within  a SUBMIT file.  An assembly-language program is
  1272.           listed that deactivates XSUB and also turns off CTRL-P if it is  on.
  1273.  
  1274.                Use  this  program  from  within  a  SUBMIT file to turn the ^P
  1275.           toggle on and off.  This  program  can  also  be  invoked  from  the
  1276.           console.   If  the CTRL-P toggle is off,  this program turns it on; if 
  1277.           on,  the  program turns it off.   It issues an appropriate message  to  
  1278.           the console that is also echoed on the list device.
  1279.  
  1280.                The program calculates the location of the  ^P  toggle  in  the
  1281.           BDOS  by  getting the BDOS address from the jump instruction located
  1282.           at 0005h in page zero and adding 307h to that address.  It then does
  1283.           an exclusive on of the toggle byte to turn ^P on or off.
  1284.  
  1285.           Note:  if XSUB is to be active in the submit file, ^P must be turned
  1286.           on  before executing XSUB.  To turn off ^P in a submit file in which
  1287.           XSUB is active, execute a program that deactivates XSUB, such as the
  1288.           DEXSUB program which is listed following this program.
  1289.  
  1290.           CntlP:
  1291.                   org     100h            ;start of TPA
  1292.           bdos    equ     5h              ;BDOS jump instruction
  1293.           bdosa   equ     bdos+1          ;BDOS entry address
  1294.           pstr    equ     9               ;print string function
  1295.           testoff equ     2feh            ;offset for verification
  1296.           listcp  equ     0dh             ;^P offset in page
  1297.           mvic    equ     3eh             ;MVI C,x instruction
  1298.           cr      equ     0dh             ;carriage return
  1299.           lf      equ     0ah             ;line feed
  1300.  
  1301.                  lhld     bdosa           ;pick up address of BDOS in HL
  1302.                   lxi     d,testoff       ;offset of ^P page in DE for add
  1303.                   dad     d               ;HL= compare area in BDOS
  1304.                   lxi     d,string        ;DE= compare string
  1305.           compare:
  1306.                  ldax     d               ;is character a 0?
  1307.                   ora     a               ;
  1308.                    jz     ok              ;yes, we're done
  1309.                   cmp     m               ;is BDOS same as string?
  1310.                   inx     h               ;next byte
  1311.                   inx     d               ;
  1312.                    jz     compare         ;BDOS = string keep looping
  1313.           error:  mvi     c,pstr          ;else print error message
  1314.                   lxi     d,errormsg      ;
  1315.                   jmp     bdos            ;return to CCP from BDOS
  1316.           ok:     mvi     l,listcp        ;listcp page offset
  1317.                   mvi     a,1             ;toggle ^P byte on or off
  1318.                   sub     m               ;true = 1, false = 0
  1319.                   mov     m,a             ;put results back in memory
  1320.                   cpi     0h              ;see if on or off
  1321.                    jz     othermsg        ;to issue appropriate message
  1322.                   lxi     d,onmsg         ;^P turned on
  1323.                   jmp     print           ;go around
  1324.           othermsg:
  1325.                   lxi     d,offmsg        ;^P turned off
  1326.           print   mvi     c,pstr          ;print sign-on message
  1327.                   jmp     bdos            ;return to CCP from BDOS
  1328.           onmsg:  db      cr,lf,'(^P turned on)$'
  1329.           offmsg  db      cr,lf,'(^P turned off)$'
  1330.           errormsg:
  1331.                   db      cr,lf,'Unable to find BDOS$'
  1332.           string  db      ret,mvic,1,jmp,0
  1333.                   end
  1334.  
  1335.           Dexsub:
  1336.                   org     100h    ;start of TPA
  1337.           bdos    equ     0005h   ;bdos location in base page
  1338.                   mvi     c,9     ;print string = function 9
  1339.                   lxi     d,msg   ;
  1340.                  call     bdos    ;
  1341.                   mvi     c,0     ;system reset = function 0
  1342.                   jmp     bdos    ;exit bdos to ccp
  1343.           msg     db      0dh,0ah,'(xsub deactivated; ^P turned off if on)$'
  1344.                   end
  1345.  
  1346.  
  1347.                This application was developed and tested by  Digital  Research
  1348.           Technical   Support   using   standard  Digital  Research  products.
  1349.           Modifications required to assemble, compile, or execute  under  non-
  1350.           standard  or non-Digital Research products are the responsibility of
  1351.           the user.
  1352.  
  1353.                Digital Research specifically disclaims any express or  implied
  1354.           warranty  and  shall  not be liable for any loss of profits, loss of
  1355.           business, loss of use or of data, interruption of business, nor  for
  1356.           indirect,  special, incidental, or consequential damages of any kind
  1357.           caused by the use or adaptation of this application note.
  1358.  
  1359.                Licensed users are granted the right to include  these  changes
  1360.           in CP/M software.
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.                                        CP/M  V2.2
  1370.                               Aplication Note 15, 12/22/82
  1371.                                Debugging a CP/M V2.2 BIOS
  1372.  
  1373.                       Copyright    1982, 1983 by Digital Research
  1374.                   CP/M is a registered trademark of Digital Research.
  1375.                  DDT, MAC, and SID are trademarks of Digital Research.
  1376.                                  Compiled February 1983
  1377.  
  1378.  
  1379.                You can easily customize the CP/M  V2.2 operating system for  a
  1380.           particular  machine  if  you  use  the  following  steps  when it is
  1381.           necessary to debug a BIOS.  You must have  a  system  running  under
  1382.           CP/M  with  a minimum of 48K to implement this scheme.  CP/M V1.4 is
  1383.           all right, and the system need work only well enough to load DDT  or
  1384.           SID  .  (SID is preferable and should be used if available.)
  1385.  
  1386.                1) Carefully do a thorough code walk-through.  This should take
  1387.                   about  eight  hours.  Pay  particular attention to the Disk
  1388.                   Parameter Blocks and Disk Parameter Headers, especially  if
  1389.                   you hand-coded these items to assemble your BIOS instead of
  1390.                   using the DISKDEF.LIB and MAC  .  A  slight  miscalculation
  1391.                   in  a DPB or DPH can cause a BIOS to perform most functions
  1392.                   correctly but fails under obscure circumstances;  or,  BIOS
  1393.                   performs  one  function  properly  and fails to perform all
  1394.                   others.
  1395.  
  1396.                2) Using your old CP/M  system,  create  your  new  system  and
  1397.                   configure  it  to 20K.  Ensure that the old system does not
  1398.                   use location 38H, which is DDT's Restart7 location.
  1399.  
  1400.                3) Load the new 20K  system  underneath  DDT  in  the  old  48K
  1401.                   system's  TPA  with  the command DDT CPM20.COM.  Figure 1-1
  1402.                   illustrates this scheme.
  1403.  
  1404.  
  1405.                                            48K BIOS
  1406.                                            48K BDOS
  1407.                                           DDT or SID
  1408.                              4A00          20K BIOS
  1409.                              3C06          20K BDOS
  1410.                              3400          20K CCP
  1411.                               980
  1412.                               900            BOOT
  1413.                                        SYSGEN or MOVCPM
  1414.                               100         BASE PAGE
  1415.  
  1416.  
  1417.                         Figure 1-1.  Loading Your New System
  1418.  
  1419.  
  1420.  
  1421.  
  1422.                                      1
  1423.  
  1424.           CP/M V2.2                                     Application Note 15
  1425.  
  1426.  
  1427.                4) At location 980 (A00h in some systems), you should find  the
  1428.                   base  of  the  CCP, recognized by two jumps followed by the
  1429.                   copyright message.  Move the 20K system  into  its  correct
  1430. W
  1431.                   memory  location  using  the  DDT M (move) command.  If DDT
  1432.                   lists  a  next  address  of  2300,  then  this  command  is
  1433.                   M980,2300,3400.
  1434.  
  1435.                5) In the 20K BIOS jump vector  at  4A00h,  insert  breakpoints
  1436.                   with   Restart7s,   or,   if  you  are  using  SID,  insert
  1437.                   passpoints.  This should be restricted to  the  disk  entry
  1438.                   points  unless you have a problem with console I/O.  If the
  1439.                   problem occurs only under certain conditions, place a  RST7
  1440.                   initially   only   at  the  write  entry  point.  When  the
  1441.                   conditions  under  which  the  problem  occurs  have   been
  1442.                   established, use a SAVE 1 xxx to return to the debugger you
  1443.                   are using and to set additional breakpoints.
  1444.  
  1445.                6) Run the 20K CP/M under the 48K CP/M's DDT.   Issue  the  DDT
  1446.                   command  G4A00, which executes the new BIOS cold boot entry
  1447.                   point.  The cold boot initializes the base page for the 20K
  1448.                   system and jumps to the CCP, which performs a BDOS Function
  1449.                   13 disk reset.  The disk reset reads the directory  sectors
  1450.                   until it encounters a sector containing 0E5h in every byte.
  1451.  
  1452.                7) If the problem you experienced fails to  reappear  when  you
  1453.                   begin  single-cycling, it might have been a timing problem.
  1454.                   If not timing then it is a logic or coding error,  and  you
  1455.                   must  continue  to  single-cycle the machine, examining the
  1456.                   contents of registers and memory locations as you go.   Pay
  1457.                   particular  attention  to the following parameters:  Track,
  1458.                   Sector, Dmaad, Diskno, and the contents of Dirbuf.  If  you
  1459.                   are using blocking/deblocking, also observe the contents of
  1460.                   Sekdsk, Hstdsk, Sektrk, Hsttrk,  Rsflag,  Erflag,  and  the
  1461.                   contents of the host buffer(s).
  1462.  
  1463.  
  1464.                Licensed users are granted the right to include  these  changes
  1465.           in CP/M software.
  1466.  
  1467.  
  1468.  
  1469.  
  1470.  
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476.                                           2
  1477.