home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / qb_pds / dos / bios / qbbios.doc < prev    next >
Encoding:
Text File  |  1987-10-14  |  64.0 KB  |  3,697 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.                                    Q B W A R E / 1
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.                                       QBBIOS.LIB
  24.  
  25.                         THE QUICKBASIC BIOS INTERFACE LIBRARY
  26.  
  27.  
  28.  
  29.                                      Version 1.0
  30.  
  31.  
  32.  
  33.  
  34.  
  35.                            R E F E R E N C E    M A N U A L
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.                                      AJM Software
  48.                                     P.O. Box 5303
  49.                                 Arvada, Co. 80005-0303
  50.  
  51.  
  52.  
  53.  
  54.  
  55.                            Copyright (c) 1987 AJM Software
  56.                                  All Rights Reserved
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.                                   TABLE OF CONTENTS
  74.  
  75.  
  76.       I.    Introduction to QBBIOS.LIB ..........................    2
  77.  
  78.       II.   A word about User supported software ................    3
  79.  
  80.       III.  Warranty Information ................................    5
  81.  
  82.       IV.   Registration and License Information ................    6
  83.  
  84.       V.    Product Support .....................................   10
  85.  
  86.       VI.   AJM Software Shareware Products .....................   11
  87.  
  88.       VII.  Using QBBIOS.LIB ....................................   12
  89.  
  90.       VIII. PRECAUTIONS (READ THIS SECTION) .....................   14
  91.  
  92.       IX.   BIOS Video Services .................................   15
  93.  
  94.       X.    BIOS Keyboard Services ..............................   22
  95.  
  96.       XI.   BIOS Diskette Services ..............................   29
  97.  
  98.       XII.  BIOS Miscellaneous Services .........................   37
  99.  
  100.       XIII. BIOS AT Disk Services ...............................   43
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.                        Copyright (c) 1987, AJM Software 
  128.                                     -Page 1-
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.                               Introduction to QBBIOS.LIB
  141.  
  142.  
  143.       QBBIOS.LIB is the first part of the 3-part QBWARE/1 package.  The entire
  144.       package also includes QBDOS.LIB and QBFILE.LIB.  The other packages will
  145.       are described briefly in this documentation and are available immediately
  146.       through AJM Software or should be available through normal shareware chan-
  147.       nels before November 1, 1987.  All of these products are sold together as
  148.       QBWARE/1, but because of the wide functional differences between each
  149.       library, the documentation and library routines are being kept separate.
  150.       Any mention of QBWARE/1 in this documentation references all three
  151.       libraries.
  152.  
  153.       QBBIOS.LIB is a series of assembler language subroutines specifically
  154.       designed to provide an easy to use interface between Quickbasic programs
  155.       and your computer's Basic Input/Output System (BIOS).  The system BIOS is
  156.       a collection of programs that control most of the fundamental processes or
  157.       functions of your computer such as system startup or initialization, com-
  158.       munications with peripheral devices such as video, disks, modems, print-
  159.       ers, etc., handling of certain error conditions such as Ctrl-Break, Divide
  160.       by zero, and others.
  161.  
  162.       Some of the services presented here are already provided in Quickbasic
  163.       and many of them are not.  They will provide you with a greater degree of
  164.       control over the environment in which your program executes as well as
  165.       performing these services much more quickly.
  166.  
  167.       You must keep in mind that these routines interact with your computer's
  168.       BIOS and have been designed and tested on IBM and COMPAQ computers.  In
  169.       order for them to function properly, your computer must be an IBM or Com-
  170.       patible.  These functions have been tested with both version 2 and
  171.       version 3 of Quickbasic.
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.       Quickbasic is a registered trademark of Microsoft.
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.                        Copyright (c) 1987, AJM Software 
  194.                                     -Page 2-
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.                          A Word about User-supported Software
  208.  
  209.     User-supported software is a means for the computing community to receive
  210.     quality software while directly supporting software authors.  It is based
  211.     on the ideas that:
  212.  
  213.           The value and utility of software is best assessed by the
  214.           user on his or her own system.  Only after using a program
  215.           can one really determine whether it serves personal
  216.           applications, needs and tastes.
  217.  
  218.           The creation of independent personal computer software can
  219.           and should be supported by the computing community.
  220.  
  221.           Copying of programs should be encouraged, rather than
  222.           restricted.  The ease with which software can be distributed
  223.           outside traditional commercial channels reflects the
  224.           strength, rather than the weakness, of electronic
  225.           information.
  226.  
  227.     Under the user supported concept, anyone may request a copy of a
  228.     user-supported program by sending a blank, formatted disk to the program
  229.     author together with an addressed, postage-paid return mailer.  A copy of
  230.     the program, along with documentation on disk, will be sent by return
  231.     mail on the user's disk.
  232.  
  233.     The program carries a notice suggesting registration for the program. You
  234.     should register if you are going to use the program on a regular basis.
  235.     Regardless of whether you register and use the program, you are
  236.     encouraged to copy and distribute the program for the private,
  237.     non-commercial, trial use of others.
  238.  
  239.     User supported software is generally not public domain material; most
  240.     programs of this nature carry a copyright notice.  Rather, the author has
  241.     licensed you to copy and use the program under certain conditions.
  242.     Likewise, user supported software is not intended to be free software; it
  243.     is an experiment in economics, not altruism.  It is intended to provide
  244.     quality software at a low price, while directly supporting the author,
  245.     without the overhead of distributors, dealers and advertising that
  246.     produces $500 software packages.
  247.  
  248.     User supported software is having a hard time.  More and more packages
  249.     are being taken out of this market, and offered as more traditional, and
  250.     expensive, products.  The reason for this is simple: lots of people are
  251.     using the packages but very few are paying for them.  And without the
  252.     support of the users, there is absolutely no incentive for software
  253.     authors to provide their programs in this fashion.
  254.  
  255.  
  256.  
  257.  
  258.  
  259.                        Copyright (c) 1987, AJM Software 
  260.                                     -Page 3-
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.     There are many good reasons to register.  Besides supporting the author
  275.     (that is, paying for the software you use), you generally get better
  276.     support and receive mailed notification of updates and other products.
  277.  
  278.     In conclusion, if you regularly use a user supported program (sometimes
  279.     called Freeware or Shareware) and have not sent in a registration to the
  280.     author, please do so now.  Only through the financial support of users
  281.     will this kind of inexpensive software continue to be available.
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.                        Copyright (c) 1987, AJM Software 
  326.                                     -Page 4-
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.                                     WARRANTY
  340.  
  341.  
  342.     AJM Software makes no warranty of any kind, express or implied,
  343.     including without limitation, any warranties of merchantability
  344.     and/or fitness for a particular purpose.  AJM Software shall
  345.     not be liable for any damages, whether direct, indirect, special or
  346.     consequential arising from a failure of this program to operate in the
  347.     manner desired by the user.  AJM Software shall not be liable
  348.     for any damage to data or property which may be caused directly or
  349.     indirectly by use of the program.
  350.  
  351.     IN NO EVENT WILL AJM Software BE LIABLE TO YOU FOR ANY DAMAGES,
  352.     INCLUDING ANY LOST PROFITS, LOST SAVINGS OR OTHER INCIDENTAL OR
  353.     CONSEQUENTIAL DAMAGES ARISING OUT OF YOUR USE OR INABILITY TO USE
  354.     THE PROGRAM, OR FOR ANY CLAIM BY ANY OTHER PARTY.
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.                        Copyright (c) 1987, AJM Software 
  392.                                     -Page 5-
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.                         Registration and ordering information
  406.  
  407.  
  408.     A QBWARE/1 registration licenses you to use the product on a regular
  409.     basis.  Registration includes mailed notification of updates and priority
  410.     support.
  411.     Users need register only one version of QBWARE/1 - registration includes
  412.     licensed use of all upgrades.
  413.  
  414.     Individual registrations for QBWARE/1 are available from AJM Software
  415.     at a cost of $39.00.  AJM will provide you with the most current release
  416.     of QBBIOS.LIB in both object and assembly source code form on 5 1/4 inch
  417.     diskette.  The reference manual will also be included on the diskette.
  418.     A bound reference manual is available for an additional $25.00.
  419.  
  420.     Registration entitles you to include any QBWARE/1 routine in your
  421.     applications for distribution without royalty.  Including QBWARE/1
  422.     in your applications without registration is strictly prohibited.
  423.  
  424.     Quantity discounts are available.  Please see the section titled
  425.     'Corporate and quantity purchases'.
  426.  
  427.     In addition, evaluation disks are available at any time for $10.  These
  428.     disks do not include registration.  The fee covers diskette, postage and
  429.     handling.
  430.  
  431.     Please use the enclosed order form when placing an order.
  432.  
  433.     ORDERS OUTSIDE THE US: Please include an additional $10.00 to cover
  434.     additional postage and handling costs.  No C.O.D.'s will be accepted
  435.     on orders delivered outside the US.
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.                        Copyright (c) 1987, AJM Software 
  458.                                     -Page 6-
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.     Remit to:                     AJM Software                     Order Form
  472.                                   P.O. Box 5303
  473.                               Arvada, CO 80005-0303
  474.  
  475.     Please send:
  476.  
  477.     ____ QBWARE/1 Disk (Evaluation only) ........... @ $ 10.00 ea  $ ______
  478.          (includes QBBIOS,QBDOS,QBFILE routines and manual on disk)
  479.  
  480.     ____ QBWARE/1 Registration ..................... @ $ 39.00 ea  $ ______
  481.          (includes QBWARE/1 disk and source code)
  482.  
  483.     ____ QBWARE/1 Bound Reference Manual ........... @ $ 25.00 ea  $ ______
  484.             (includes only the reference manual)
  485.                                                          Subtotal    ______
  486.  
  487.                                                     Less Discount   <______>
  488.  
  489.                                                C.O.D. Fee ($5.00)    ______
  490.  
  491.                                                              Total $ ______
  492.  
  493.     Payment by:   ( ) Check   ( ) C.O.D.
  494.  
  495.        Name: ____________________________________________________________
  496.  
  497.     Company: ____________________________________________________________
  498.  
  499.     Address: ____________________________________________________________
  500.  
  501.            : ____________________________________________________________
  502.  
  503.            : ____________________________________________________________
  504.  
  505.     Day Phone: _________________________ Eve: ___________________________
  506.  
  507.  
  508.  
  509.     ORDERS OUTSIDE THE US: Please include an additional $10.00 to cover
  510.     additional postage and handling costs.  No C.O.D.'s will be accepted
  511.     on orders delivered outside the US.
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.                        Copyright (c) 1987, AJM Software 
  524.                                     -Page 7-
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.                         Corporate and Quantity Purchases
  539.  
  540.  
  541.     All corporate, business, government or other commercial users of QBBIOS.LIB
  542.     must be registered.  We offer quantity discounts starting at the sixth
  543.     copy.
  544.  
  545.     Orders in quantities of less than 50 units are handled as bulk purchases.
  546.     Purchases of over 50 units may be handled as quantity purchases or as
  547.     corporate licensing agreements.  Licensing agreements allow duplication
  548.     and distribution of specific numbers of copies within the licensed
  549.     institution.  Duplication of multiple copies is not allowed except
  550.     through execution of a licensing agreement.  Please write for
  551.     details.
  552.  
  553.     The quantity purchase discounts are as follows:
  554.  
  555.             0- 5  copies:      no discount
  556.             6- 20 copies:     20% discount
  557.            21+    copies:     40% discount
  558.  
  559.     ALL PRICES AND DISCOUNTS ARE SUBJECT TO CHANGE WITHOUT NOTICE.  Discounts
  560.     are not cumulative; they apply to single orders of like products only.
  561.     Unit prices are the same as for individual users.
  562.  
  563.     WARNING: YOU MAY NOT USE QBWARE/1 WITHIN YOUR ORGANIZATION WITHOUT A PRIOR
  564.     PURCHASE OR LICENSE ARRANGEMENT.
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.                        Copyright (c) 1987, AJM Software 
  590.                                     -Page 8-
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.                                      LICENSE
  604.  
  605.     All versions of QBWARE/1, including version 1.0, are not public domain
  606.     software, nor are they free software.
  607.  
  608.     QBWARE/1 is copyright (C) 1987 by AJM Software
  609.  
  610.     Non-registered users are granted a limited license to use QBWARE/1 on a
  611.     trial basis for the purpose of determining whether it is suitable
  612.     for their needs.  Use of QBWARE/1, except for this limited purpose,
  613.     requires registration.  Use of non-registered copies of QBWARE/1 by any
  614.     person, business, corporation, governmental agency or other entity
  615.     institution is strictly forbidden.
  616.  
  617.     Registration permits a user the license to use QBWARE/1 for development
  618.     purposes, only on a single computer.  QBWARE/1 can be included into any
  619.     program and distributed in library form only without royalty.
  620.     A registered user may use the program on a different computer,
  621.     but may not use the program on more than one computer at the same time.
  622.  
  623.     All users are granted a limited license to copy QBWARE/1 only for the
  624.     trial use of others subject to the above limitations, and also the
  625.     following:
  626.  
  627.           QBWARE/1 must be copied in unmodified form, complete with the file
  628.           containing this license information.
  629.  
  630.           The full QBWARE/1 documentation must be included with the copy.
  631.  
  632.           No fee, charge or other compensation may be accepted or requested
  633.           by any licensee, except a handling fee not to exceed $10.00
  634.  
  635.           QBWARE/1 may not be distributed in conjunction with any other
  636.           product.
  637.  
  638.           The ASSEMBLY source code for QBWARE/1 may NOT be distributed under
  639.           any circumstances.
  640.  
  641.           The object modules supplied with a registered copy of QBWARE/1
  642.           may NOT be distributed under any circumstances.
  643.  
  644.     Operators of electronic bulletin board systems (Sysops) may post QBWARE/1
  645.     for downloading by their users only as long as the above conditions are
  646.     met.
  647.  
  648.     Distributors of public domain or user supported software, other than
  649.     operators of electronic bulletin board systems, may distribute
  650.     copies of QBWARE/1 subject to the above conditions only after obtaining
  651.     written permission from AJM Software.
  652.  
  653.  
  654.  
  655.                        Copyright (c) 1987, AJM Software 
  656.                                     -Page 9-
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.                                    Product Support
  670.  
  671.     If you have any questions or comments about the use of QBWARE/1, please
  672.     fill out a problem log and send it to us.
  673.  
  674.     In your note, describe as completely as possible the problem you
  675.     are having.  Let us know your machine configuration, which routine
  676.     you are questioning, the version of QBBIOS.LIB, and any resident software
  677.     installed.  If possible, include a copy (on paper) of your source code.
  678.  
  679.     Describe what steps you take before the problem occurs, and exactly what
  680.     the program does when it occurs.  If you do not provide us with a
  681.     complete description of the problem there is little we can do to help.
  682.     We'll do our best to get you past the problem, but if you are not a
  683.     registered user we do not guarantee to provide support of any kind.
  684.  
  685.     Please be patient.  We usually respond to registered users within 3
  686.     working days at the most.
  687.  
  688.     We will provide support to non-registered users at our discretion.  It
  689.     generally depends on how the request is worded and the mental disposition
  690.     of the staff person assigned to handle requests on that day.
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.                        Copyright (c) 1987, AJM Software 
  722.                                    -Page 10-
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.  
  733.  
  734.  
  735.                            AJM Software Shareware Products
  736.  
  737.       AJM Software has developed several software products being released
  738.       through Shareware channels.  These are:
  739.  
  740.                         QBWARE/1
  741.  
  742.       QBBIOS.LIB        The Quickbasic BIOS interface library
  743.       QBDOS.LIB         The Quickbasic DOS interface library
  744.       QBFILE.LIB        The Quickbasic DOS File Mgmt interface library
  745.  
  746.                         QBWARE/2
  747.  
  748.       QBWINDOW.LIB      The Quickbasic windowing system library
  749.       QBFUNC.LIB        The Quickbasic function library
  750.  
  751.  
  752.       QBBIOS.LIB is the Quickbasic - BIOS interface library.  This is a collec-
  753.       tion of assembler routines that can be called from Quickbasic to gain
  754.       direct access to video, keyboard, disk, and printer services.  It also
  755.       provides a method of determining the computer's configuration, including
  756.       amount of RAM - conventional, extended, and LIMM expanded, number of hard
  757.       disks and floppy disks, and more.
  758.  
  759.  
  760.       QBDOS.LIB is the Quickbasic - DOS interface library.  This is a collection
  761.       of assembler routines that can be called from Quickbasic to gain access to
  762.       most of the DOS facilities.  Services include access to the print spooler
  763.       (DOS V3.00 or higher only), acquisition of an additional 64KB of string
  764.       space, access to the DOS Video routines, and routines to provide DOS redi-
  765.       rection in a Quickbasic program, and more.
  766.  
  767.  
  768.       QBFILE.LIB is the Quickbasic - DOS File Manager interface library.  This
  769.       is a collection of assembly language routines that can be called from
  770.       Quickbasic to gain access to the DOS File Manager facilities.  Services
  771.       include file open, close, and various versions of create, get, set or
  772.       change current drive or directory, read or write individual sectors, read
  773.       or write individual records within a file, get or change disk volume
  774.       names, rename or copy files, get or set file creation dates or times,
  775.       directly access the disk directory or sub-directories, and more.
  776.  
  777.       QBWARE/2 will be released as a Shareware product on December 1, 1987.
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.                        Copyright (c) 1987, AJM Software 
  788.                                    -Page 11-
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801.                                    Using QBBIOS.LIB
  802.  
  803.       All of the QBBIOS.LIB routines can be accessed via the Quickbasic 'Call'
  804.       statement.  The format of this statement is as follows:
  805.  
  806.          Call Function(Parm1%, Parm2%, Parm3$)
  807.  
  808.       Function is the name of the routine to be executed.  It must be spelled
  809.       exactly as shown in the following chapters.  The parameters to be passed
  810.       to the routine will also be explained in the following chapters.  You must
  811.       use the exact number of parameters shown in each function description and
  812.       each parameter must be the type (i.e. character or integer) shown in each
  813.       function description.  Using an incorrect number of parameters or using a
  814.       parameter of the wrong type (i.e. using character instead of integer) will
  815.       generally result in the abnormal termination of your program.  Usually you
  816.       will get either a 'String Space Corrupt' error or you will start executing
  817.       the wrong statements in your program.  In any event, it is almost impos-
  818.       sible to predict the results of these two types of errors, so it is criti-
  819.       cal that you be very careful in coding the call statements.
  820.  
  821.       The parameters passed to QBBIOS.LIB routines will be either character or
  822.       numeric integers.  There are no special requirements for passing integers
  823.       and constants may also be used.  There is no functional difference between
  824.       these two sets of statements:
  825.  
  826.          Example 1
  827.  
  828.               Drive$ = "A"                      'Indicate drive a
  829.               Type%  =  2                       'Indicate 360KB disk
  830.               Call BsDASTyp(Drive$, Type%, Rc%) 'Call QBBIOS routine
  831.  
  832.          Example 2
  833.  
  834.               Call BsDASTyp("A", 2, Rc%)
  835.  
  836.       Note that Rc% must not be defined as a constant because the QBBIOS routine
  837.       will return a value in this field and your Quickbasic program cannot
  838.       access this field if it is defined as a constant.  All character fields
  839.       must be initialized to the proper length before calling a QBBIOS.LIB func-
  840.       tion.  Failing to do so may result in a 'String Space Corrupt' condition.
  841.       The following two examples appear similar but Example 1 will fail and
  842.       Example 2 will succeed because 'Char$' has been properly initialized.
  843.  
  844.          Example 1 (incorrect)
  845.  
  846.               Char$ = ""                        'clear work field
  847.               Call BsGKey(Char$, Scan.Code%)    'get the next keystroke
  848.  
  849.  
  850.  
  851.  
  852.  
  853.                        Copyright (c) 1987, AJM Software 
  854.                                    -Page 12-
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.          Example 2 (correct)
  869.  
  870.               Char$ = space$(1)                 'clear work field
  871.               Call BsGKey(Char$, Scan.Code%)    'get the next keystroke
  872.  
  873.  
  874.       Including the QBBIOS.LIB routines in your programs can be accomplished in
  875.       a variety of ways.  The non-registered user can do one of the following:
  876.  
  877.        1)  compile the program from within the Quickbasic interactive develop-
  878.            ment environment
  879.  
  880.        2)  compile the program from the DOS prompt
  881.  
  882.       In order to use method 1, place the file QBBIOS.EXE in the directory con-
  883.       taining your Quickbasic files (i.e. QB.EXE and BRUN20.LIB).  When starting
  884.       Quickbasic, enter the following command at the DOS prompt:
  885.  
  886.          QB /L QBBIOS.EXE
  887.  
  888.       You may now use any of the QBBIOS.LIB functions in your programs.  If you
  889.       compile your program using the 'Exe' output option, the appropriate
  890.       QBBIOS.LIB functions will be available to the EXE file.
  891.  
  892.       In order to use method 2, place the file QBBIOS.EXE in the directory con-
  893.       taining your Quickbasic system files.  The following example shows how to
  894.       create an executable file from the Basic source code in the file
  895.       'FILECHK.BAS':
  896.  
  897.          QB FILECHK /L QBBIOS.EXE;
  898.          LINK FILECHK;
  899.  
  900.       Doing this will create the executable file 'FILECHK.EXE'
  901.  
  902.       Additionally, registered users will have the ability to create their own
  903.       custom user library (see the file BUILDLIB.QBB on the QBBIOS.LIB disk for
  904.       instructions) or they can include the appropriate functions into their
  905.       program when it is linked.  For example, if the program 'INPUT.BAS' uses
  906.       the QBBIOS.LIB routines BSKGET and BSKNXT, an executable file can be
  907.       created using the following commands at the DOS prompt:
  908.  
  909.          QB INPUT;
  910.          LINK INPUT BSKGET BSKNXT;
  911.  
  912.       This assumes that all of the files on the QBBIOS.LIB disk have been placed
  913.       into the directory containing the Quickbasic system files.
  914.  
  915.  
  916.  
  917.  
  918.  
  919.                        Copyright (c) 1987, AJM Software 
  920.                                    -Page 13-
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.                                   PRECAUTIONS!!!!!!
  934.  
  935.  
  936.       These routines were designed to used with Quickbasic on an IBM  PC or com-
  937.       patible computer.  Using this product with any Basic compiler or inter-
  938.       preter other than Quickbasic version 2 or 3 will probably not work and may
  939.       cause loss of data.
  940.  
  941.       Using this product on a non-IBM compatible computer will give hit or miss
  942.       results.  Some things will work, some things won't work.  The only way to
  943.       find out is to try.
  944.  
  945.       A SPECIAL NOTE ABOUT HARD DISKS - there are many manufacturers and vari-
  946.       eties of hard disks available for the IBM PC and compatible computer.
  947.       Many of these hard disks work through the traditional BIOS functions and
  948.       many provide their own proprietary software to function properly.  These
  949.       disks with proprietary software may not respond properly to some of the
  950.       BIOS interface routines.  IN ANY EVENT, DO NOT TEST ANY HARD DISK OR
  951.       FLOPPY DISK ROUTINES WITHOUT FIRST BACKING UP YOUR DISK - REPEAT - DO
  952.       NOT TEST ANY HARD DISK OR FLOPPY DISK ROUTINES WITHOUT FIRST BACKING UP
  953.       YOUR DISK.
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.                        Copyright (c) 1987, AJM Software 
  986.                                    -Page 14-
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998.  
  999.                                The BIOS Video Services
  1000.  
  1001.  
  1002.       Function Summary
  1003.  
  1004.  
  1005.       BSVMODE  - Get or set video mode
  1006.  
  1007.       BSVSCUR  - Set or get cursor size
  1008.  
  1009.       BSVSWID  - Get screen width
  1010.  
  1011.       BSVSPOS  - Get or set cursor position
  1012.  
  1013.       BSVSPAG  - Get or set video display page
  1014.  
  1015.       BSVSCRUP - Scroll up or clear a window
  1016.  
  1017.       BSVSCRDN - Scroll down or clear a window
  1018.  
  1019.       BSVRCHR  - Read a character and attribute from the screen
  1020.  
  1021.       BSVWCHR  - Write a character to the screen
  1022.  
  1023.       BSVWTTY  - Write in teletype mode
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.                        Copyright (c) 1987, AJM Software 
  1052.                                    -Page 15-
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.       BSVMODE  - Get or set video mode 
  1066.  
  1067.       Usage - Call BsVMode(Function%, Mode%)
  1068.  
  1069.  
  1070.          Function%    0 - set video mode
  1071.                       1 - get video mode
  1072.  
  1073.          Mode%   (When Function% = 0, Mode% must be initialized to one
  1074.                   of the following values.  When Function% = 1, Mode% will
  1075.                   return one of the following values.)
  1076.  
  1077.               Mode  Type                                   Adapter
  1078.  
  1079.               0     40 X 25 B/W text                       CGA
  1080.               1     40 X 25 16 color text                  CGA
  1081.               2     80 X 25 B/W text                       CGA
  1082.               3     80 X 25 16 color text                  CGA
  1083.               4     320 X 200 4 color graphics             CGA
  1084.               5     320 X 200 4-Grey graphics              CGA
  1085.               6     640 X 200 B/W graphics                 CGA
  1086.               7     80 X 25 B/W text                       MA(Monochrome)
  1087.               8     160 X 200 16 color graphics            PCjr
  1088.               9     320 X 200 16 color graphics            PCjr
  1089.               10    640 X 200 4 color graphics             PCjr
  1090.               10    640 X 200 16 color graphics            EGA
  1091.               13    320 X 200 4 color graphics             EGA
  1092.               14    640 X 200 16 color graphics            EGA
  1093.               15    640 X 350 4 color graphics             EGA
  1094.               16    640 X 350 4 or 16 color graphics       EGA
  1095.  
  1096.       Programming notes:
  1097.  
  1098.       For RGB monitors, there is no functional difference between modes 0 and 1,
  1099.       or between modes 2 and 3.
  1100.  
  1101.       The EGA will support all modes except 8 and 9.
  1102.  
  1103.       Normally, the screen buffer will be cleared when you set the video mode -
  1104.       even if you set it the same mode.  This is not, however, a recommended
  1105.       method for clearing the screen as it could cause some delay in many PC-
  1106.       compatibles.
  1107.  
  1108.       Using a mode that is not supported by your video adapter card will have
  1109.       unpredictable results.
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.                        Copyright (c) 1987, AJM Software 
  1118.                                    -Page 16-
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.  
  1131.       BSVSCUR  - Set or get cursor size
  1132.  
  1133.       Usage - Call BsVSCur(Function%, Start%, End%)
  1134.  
  1135.          Function%    0 - set cursor size
  1136.                       1 - get cursor size
  1137.  
  1138.          Start%       Starting scan line
  1139.  
  1140.          End%         Ending scan line
  1141.  
  1142.       Programming notes:
  1143.  
  1144.       The scan line is a row of pixels that make up a character on the screen.
  1145.       On monochrome monitors, there are 13 scan lines numbered 0 thru 12.  On
  1146.       RGB monitors, there are 8 scan lines numbered 0 thru 7.  The default val-
  1147.       ues for cursor size are as follows:
  1148.  
  1149.       Mode    Display                     Start       End
  1150.  
  1151.       0-3     RGB Monitor (text modes)      6          7
  1152.       7       Monochrome                    11         12
  1153.  
  1154.       The hardware causes the cursor to blink and it normally cannot be dis-
  1155.       abled while in text mode, however, some machines will cause the cursor to
  1156.       disappear when a starting scan line of 32 is used.  A technique that
  1157.       always makes the cursor disappear is to move it off the screen using
  1158.       BSVSPOS (e.g. move it to column 1, row 26).
  1159.  
  1160.       Using a starting scan line that is greater than the ending scan line will
  1161.       make the cursor wrap and cause a two-part cursor to show on the screen.
  1162.  
  1163.       Function% must be initialized prior to calling BSVSCUR.  If function% is 0
  1164.       then Start% and End% must be initialized to proper values prior to making
  1165.       the call.
  1166.  
  1167.  
  1168.  
  1169.  
  1170.  
  1171.  
  1172.  
  1173.  
  1174.  
  1175.  
  1176.  
  1177.  
  1178.  
  1179.  
  1180.  
  1181.  
  1182.  
  1183.                        Copyright (c) 1987, AJM Software 
  1184.                                    -Page 17-
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.       BSVSWID  - Get screen width
  1198.  
  1199.       Usage - Call BsVSWid(Wid%)
  1200.  
  1201.          Wid%         Number of characters that can be displayed on the screen -
  1202.                       either 40 or 80.
  1203.  
  1204.  
  1205.  
  1206.       BSVSPOS  - Get or set cursor position
  1207.  
  1208.       Usage - Call BsVSPos(Function%, Row%, Column%, Page%)
  1209.  
  1210.          Function%    0 - set cursor position
  1211.                       1 - get cursor position
  1212.  
  1213.          Row%         Cursor coordinate
  1214.  
  1215.          Column%      Cursor coordinate
  1216.  
  1217.          Page%        Display page whose cursor position is to be set or
  1218.                       retrieved.
  1219.  
  1220.  
  1221.       Programming notes:
  1222.  
  1223.       A separate cursor is maintained for each display page (See BSVSPAG for
  1224.       more on display pages).  The cursor is affected only in the display page
  1225.       specified.
  1226.  
  1227.       Coordinates (1,1) represent the upper left hand corner of the screen.
  1228.  
  1229.       Coordinates (80,25) represent the lower right-hand corner of the screen.
  1230.  
  1231.       Positioning the cursor outside the limits of the current display will
  1232.       cause the cursor to disappear.
  1233.  
  1234.       In graphics modes, Row% and Column% should be interpreted as pixel coordi-
  1235.       nates.
  1236.  
  1237.       Function% and Page% must be initialized prior to calling BSVSPOS.  If
  1238.       Function% is 0 then Row% and Column% must be initialized prior to making
  1239.       the call.
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.                        Copyright (c) 1987, AJM Software 
  1250.                                    -Page 18-
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.  
  1261.  
  1262.  
  1263.       BSVSPAG  - Get or set video display page
  1264.  
  1265.       Usage - Call(BsVSPag(Function%, Page%)
  1266.  
  1267.          Function%    0 - set current page
  1268.                       1 - get current page
  1269.  
  1270.       Programming Notes:
  1271.  
  1272.       Valid page ranges are as follows:
  1273.  
  1274.       Page range               Mode                 Adapter
  1275.  
  1276.        0 - 7                   0                    CGA
  1277.        0 - 7                   1                    CGA
  1278.        0 - 3                   2                    CGA
  1279.        0 - 3                   3                    CGA
  1280.        0 - 7                   2                    EGA
  1281.        0 - 7                   3                    EGA
  1282.        0 - 7                   13                   EGA
  1283.        0 - 3                   14                   EGA
  1284.        0 - 1                   15                   EGA
  1285.        0 - 1                   16                   EGA
  1286.  
  1287.  
  1288.       Changing pages has no effect on their contents and text can be written to
  1289.       any page regardless of which page is active.
  1290.  
  1291.       Using multiple pages is not possible on a monochrome monitor with an MDA
  1292.       adapter.
  1293.  
  1294.       Function% must be initialized to 0 or 1 prior to calling BSVSPAG.  If
  1295.       Function% is 0 then Page% must be initialized to a valid page number.
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.                        Copyright (c) 1987, AJM Software 
  1316.                                    -Page 19-
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.  
  1325.  
  1326.  
  1327.  
  1328.  
  1329.       BSVSCRUP - Scroll up or clear a window
  1330.  
  1331.       Usage - Call BsVScrup(Lines%, FgColor%, BgColor%, Ulc%, Ulr%, Lrc%, Lrr%)
  1332.  
  1333.          Lines%       Number of lines to scroll up.  If Lines% is zero, then the
  1334.                       entire window is blanked.
  1335.  
  1336.          FgColor%     Foreground color - 0 thru 31 are valid foreground colors.
  1337.  
  1338.          BgColor%     Background color - 0 thru 7 are valid background colors.
  1339.  
  1340.          Ulc%         Coordinate of the left column of the scroll window.
  1341.                       1 indicates the far left column.
  1342.  
  1343.          Ulr%         Coordinate of the top row of the scroll window.  1 indi-
  1344.                       cates the top row of the screen.
  1345.  
  1346.          Lrc%         Coordinate of the right column of the scroll window.  80
  1347.                       is the far right column.
  1348.  
  1349.          Lrr%         Coordinate of the bottom row of the scroll window.  25 is
  1350.                       the last row of the screen.
  1351.  
  1352.       Programming notes:
  1353.  
  1354.       This function affects only the currently active display page and any data
  1355.       scrolled off of the window is lost.  Blank lines are inserted at the bot-
  1356.       tom of the window.  If the number of lines to scroll equals zero, then the
  1357.       entire window is blanked out.
  1358.  
  1359.       All fields must be initialized prior to calling BSVSCRUP.
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.                        Copyright (c) 1987, AJM Software 
  1382.                                    -Page 20-
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.  
  1395.       BSVSCRDN - Scroll down or clear a window
  1396.  
  1397.       Usage - Call BsVScrdn(Lines%, FgColor%, BgColor%, Ulc%, Ulr%, Lrc%, Lrr%)
  1398.  
  1399.          Lines%       Number of lines to scroll down.  If Lines% is zero, then
  1400.                       the entire window is blanked.
  1401.  
  1402.          FgColor%     Foreground color - 0 thru 31 are valid foreground colors.
  1403.  
  1404.          BgColor%     Background color - 0 thru 7 are valid background colors.
  1405.  
  1406.          Ulc%         Coordinate of the left column of the scroll window.
  1407.                       1 indicates the far left column.
  1408.  
  1409.          Ulr%         Coordinate of the top row of the scroll window.  1 indi-
  1410.                       cates the top row of the screen.
  1411.  
  1412.          Lrc%         Coordinate of the right column of the scroll window.  80
  1413.                       is the far right column.
  1414.  
  1415.          Lrr%         Coordinate of the bottom row of the scroll window.  25 is
  1416.                       the last row of the screen.
  1417.  
  1418.       Programming notes:
  1419.  
  1420.       This function affects only the currently active display page and any data
  1421.       scrolled off of the window is lost.  Blank lines are inserted at the top
  1422.       of the window.  If the number of lines to scroll equals zero, then the
  1423.       entire window is blanked out.
  1424.  
  1425.       All fields must be initialized prior to calling BSVSCRDN.
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.  
  1441.  
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447.                        Copyright (c) 1987, AJM Software 
  1448.                                    -Page 21-
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459.  
  1460.  
  1461.                               The BIOS Keyboard Services
  1462.  
  1463.  
  1464.  
  1465.       Function Summary
  1466.  
  1467.  
  1468.       BSKGET   - Get a character from the keyboard
  1469.  
  1470.       BSKSTAT  - Determine the status of the toggle keys
  1471.  
  1472.       BSKCLR   - Clear the keyboard buffer
  1473.  
  1474.       BSKNXT   - Preview the keyboard buffer
  1475.  
  1476.       BSKSTOG  - Set keyboard toggles
  1477.  
  1478.       BSKTOGH  - Determine whether toggle keys are pressed
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.  
  1503.  
  1504.  
  1505.  
  1506.  
  1507.  
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.                        Copyright (c) 1987, AJM Software 
  1514.                                    -Page 22-
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526.  
  1527.       BSKGET   - Get a character from the keyboard
  1528.  
  1529.       Usage - Call BsKGet(Char$, Scancode%)
  1530.  
  1531.          Char$        The character entered at the keyboard.
  1532.  
  1533.          Scancode%    The scan code of the character entered at the keyboard.
  1534.                       A partial list of scancodes is provided in Appendix A.
  1535.  
  1536.  
  1537.       Programming notes:
  1538.  
  1539.       This function retrieves the next character in the keyboard buffer.  If
  1540.       there is nothing in the buffer, it will wait until a character is ready
  1541.       and thereby suspend program execution.  BSKNXT, discussed later, will
  1542.       allow you to peek into the keyboard buffer to determine if a key has been
  1543.       pressed without suspending the program.
  1544.  
  1545.       Char$ will either the standard ASCII code of the key pressed or CHR$(0) if
  1546.       a special key was pressed (i.e. the function keys, PgUp, Home, etc.).  If
  1547.       Char$ is a CHR$(0), then Scancode% will indicate which key was pressed.
  1548.       See Appendix A for a list of scancodes.
  1549.  
  1550.  
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.  
  1560.  
  1561.  
  1562.  
  1563.  
  1564.  
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570.  
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579.                        Copyright (c) 1987, AJM Software 
  1580.                                    -Page 23-
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591.  
  1592.  
  1593.       BSKSTAT  - Determine the status of the toggle keys
  1594.  
  1595.       Usage - 
  1596.       Call BsKStat(Insert%, Caps%, Num%, Scroll%, Alt%, Ctrl%, LShift%, RShift%)
  1597.  
  1598.  
  1599.       Programming notes:
  1600.  
  1601.       For Insert%, Caps%, Num%, and Scroll% - If the returned value is 1, then
  1602.       that mode has been toggled on (i.e. - Caps light is on).  If the value
  1603.       returned is 0, then that mode has been toggled off.
  1604.  
  1605.       For Alt%, Ctrl%, LShift%, RShift% - If the returned value is 1, then that
  1606.       key is currently depressed.  If the value is 0, then that key is not
  1607.       depressed.
  1608.  
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617.  
  1618.  
  1619.  
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626.  
  1627.  
  1628.  
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  
  1634.  
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.                        Copyright (c) 1987, AJM Software 
  1646.                                    -Page 24-
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.  
  1655.  
  1656.  
  1657.  
  1658.  
  1659.       BSKCLR   - Clear the keyboard buffer
  1660.  
  1661.       Usage - Call BsKClr
  1662.  
  1663.  
  1664.       Programming notes:
  1665.  
  1666.       BSKCLR is not passed any parameters, nor does it return any values.  It
  1667.       simply clears any keystrokes that have not been read into your program but
  1668.       are waiting in the keyboard buffer.
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.  
  1681.  
  1682.  
  1683.  
  1684.  
  1685.  
  1686.  
  1687.  
  1688.  
  1689.  
  1690.  
  1691.  
  1692.  
  1693.  
  1694.  
  1695.  
  1696.  
  1697.  
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709.  
  1710.  
  1711.                        Copyright (c) 1987, AJM Software 
  1712.                                    -Page 25-
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723.  
  1724.  
  1725.       BSKNXT   - Preview the keyboard buffer
  1726.  
  1727.       Usage - Call BsKNxt(Char$, Scancode%, Rc%)
  1728.  
  1729.          Char$        The character entered at the keyboard.
  1730.  
  1731.          Scancode%    The scan code of the character entered at the keyboard.
  1732.                       A partial list of scancodes is provided in Appendix A.
  1733.  
  1734.          Rc%          Return code 0 indicates that no key has been pressed.
  1735.                       Return code 1 indicates that a key has been pressed.
  1736.  
  1737.  
  1738.       Programming notes:
  1739.  
  1740.       This function will not remove a character from the keyboard buffer.  If
  1741.       the return code indicates that a character is in the buffer, you must use
  1742.       BSKGET to get the character out of the buffer.
  1743.  
  1744.       See notes for BSKGET and Appendix A.
  1745.  
  1746.  
  1747.  
  1748.  
  1749.  
  1750.  
  1751.  
  1752.  
  1753.  
  1754.  
  1755.  
  1756.  
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766.  
  1767.  
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777.                        Copyright (c) 1987, AJM Software 
  1778.                                    -Page 26-
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.  
  1787.  
  1788.  
  1789.  
  1790.  
  1791.       BSKSTOG  - Set keyboard toggles
  1792.  
  1793.       Usage - Call BsKSTog(Insert%, Caps%, Num%, Scroll%)
  1794.  
  1795.  
  1796.       Programming notes:
  1797.  
  1798.       Each parameter must be initialized to 0 or 1.  If the parameter is ini-
  1799.       tialized to 1 then that toggle will be turned on.  If the parameter is 0
  1800.       then that toggle will be turned off.  For example:
  1801.  
  1802.          Call BsKSTog(0,1,1,0)
  1803.  
  1804.       will turn CapsLock and NumLock on, and it will turn ScrollLock and Insert
  1805.       mode off.
  1806.  
  1807.  
  1808.  
  1809.  
  1810.  
  1811.  
  1812.  
  1813.  
  1814.  
  1815.  
  1816.  
  1817.  
  1818.  
  1819.  
  1820.  
  1821.  
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.                        Copyright (c) 1987, AJM Software 
  1844.                                    -Page 27-
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.  
  1856.  
  1857.       BSKTOGH  - Determine whether toggle keys are pressed
  1858.  
  1859.       Usage - Call BsKTogH(Insert%, Caps%, Num%, Scroll%)
  1860.  
  1861.  
  1862.       Programming notes:
  1863.  
  1864.       No parameters need to be initialized prior to making this call.  If any of
  1865.       the returned values is 1, that indicates that the corresponding key is
  1866.       currently being held down.  If any of the returned values is 0, that indi-
  1867.       cates that the corresponding key is not currently being held down.
  1868.  
  1869.       Note that this function does not tell us the status of the toggle keys,
  1870.       only whether or not someone is physically pressing them at that moment.
  1871.  
  1872.  
  1873.  
  1874.  
  1875.  
  1876.  
  1877.  
  1878.  
  1879.  
  1880.  
  1881.  
  1882.  
  1883.  
  1884.  
  1885.  
  1886.  
  1887.  
  1888.  
  1889.  
  1890.  
  1891.  
  1892.  
  1893.  
  1894.  
  1895.  
  1896.  
  1897.  
  1898.  
  1899.  
  1900.  
  1901.  
  1902.  
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.                        Copyright (c) 1987, AJM Software 
  1910.                                    -Page 28-
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  
  1920.  
  1921.  
  1922.                               The BIOS Diskette Services
  1923.  
  1924.  
  1925.  
  1926.       Function Summary
  1927.  
  1928.  
  1929.       BSDSTAT  - Get diskette controller status
  1930.  
  1931.       BSDRESET - Reset floppy disk controller
  1932.  
  1933.       BSDVRFY  - Verify sectors on a diskette
  1934.  
  1935.       BSDREAD  - Read a sector from a diskette
  1936.  
  1937.       BSDWRIT  - Write a sector to diskette
  1938.  
  1939.       BSDFMT   - Format a track on a diskette
  1940.  
  1941.  
  1942.  
  1943.       *********************** IMPORTANT *************************
  1944.  
  1945.       Before using any of these functions, please read the documentation care-
  1946.       fully and when testing your programs, please use blank diskettes.  These
  1947.       functions will also work with a hard disk, so if you have a hard disk
  1948.       installed, please take extra precautions.
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.                        Copyright (c) 1987, AJM Software 
  1976.                                    -Page 29-
  1977.  
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984.  
  1985.  
  1986.  
  1987.  
  1988.  
  1989.       BSDSTAT  - Get diskette controller status
  1990.  
  1991.       Usage Call BsDStat(Rc%)
  1992.  
  1993.       Rc%     Reason - Diskette drives only
  1994.  
  1995.       0       Successful
  1996.       1       Invalid function
  1997.       2       Address mark not found
  1998.       3       Write protect error
  1999.       4       Sector not found
  2000.       6       Diskette change detected
  2001.       8       DMA failure
  2002.       9       DMA boundary overrun
  2003.       16      bad CRC: parity check
  2004.       32      controller malfunction
  2005.       64      seek failure - move to requested track failed
  2006.       128     time out - drive did not respond (the door is open)
  2007.  
  2008.       Rc%     Reason - Hard disk drives only
  2009.  
  2010.       0       Successful
  2011.       1       Invalid function
  2012.       2       Address mark not found
  2013.       4       Sector not found
  2014.       5       Reset failed
  2015.       7       Drive parameter activity failed
  2016.       9       DMA boundary overrun
  2017.       10      Bad block flag detected
  2018.       16      Uncorrectable ECC data error
  2019.       17      ECC corrected data error
  2020.       32      controller malfunction
  2021.       64      seek failure - move to requested track failed
  2022.       128     time out - drive did not respond
  2023.       170     Drive not ready
  2024.       187     Undefined error occured
  2025.       204     Write fault active
  2026.       255     Sense operation failed
  2027.  
  2028.  
  2029.       Programming notes:
  2030.  
  2031.       This function always returns the status of the last disk operation.
  2032.  
  2033.       The messages normally seen when accessing a diskette with DOS, such as:
  2034.          Not ready error reading drive a
  2035.          Abort, Retry, Ignore
  2036.       will not be seen when using this function (and any other BIOS diskette
  2037.       function), therefore, you must always determine whether a disk operation
  2038.       has failed or succeeded when using the BIOS disk services.
  2039.  
  2040.  
  2041.                        Copyright (c) 1987, AJM Software 
  2042.                                    -Page 30-
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050.  
  2051.  
  2052.  
  2053.  
  2054.  
  2055.       BSDRESET - Reset floppy disk controller
  2056.  
  2057.       Usage - Call BsDReset
  2058.  
  2059.  
  2060.       Programming notes:
  2061.  
  2062.       This function resets the disk controller and prepares it for I/O.  It will
  2063.       force the BIOS diskette support routines to recalibrate the disk drive's
  2064.       read/write head.  It should be used only after an error is detected during
  2065.       a disk drive operation.
  2066.  
  2067.  
  2068.  
  2069.  
  2070.  
  2071.  
  2072.  
  2073.  
  2074.  
  2075.  
  2076.  
  2077.  
  2078.  
  2079.  
  2080.  
  2081.  
  2082.  
  2083.  
  2084.  
  2085.  
  2086.  
  2087.  
  2088.  
  2089.  
  2090.  
  2091.  
  2092.  
  2093.  
  2094.  
  2095.  
  2096.  
  2097.  
  2098.  
  2099.  
  2100.  
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106.  
  2107.                        Copyright (c) 1987, AJM Software 
  2108.                                    -Page 31-
  2109.  
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116.  
  2117.  
  2118.  
  2119.  
  2120.  
  2121.       BSDVRFY  - Verify sectors on a disk
  2122.  
  2123.       Usage - Call BsDVrfy(Buffer$, Drive$, Head%, Track%, Sector%, Rc%)
  2124.  
  2125.          Buffer$        Not used for this function.
  2126.  
  2127.          Drive$         Letter designation for to drive containing the diskette
  2128.                         to be verified.
  2129.  
  2130.          Head%          Cylinder head
  2131.  
  2132.          Track%         Track containing sector to be verified.
  2133.  
  2134.          Sector%        Relative ID of the sector to be verified.
  2135.  
  2136.          Rc%            Return code - see function BSDSTAT
  2137.  
  2138.  
  2139.       Programming notes:
  2140.  
  2141.       For 1.2 Meg drives, the diskette drive parameter table must reflect the
  2142.       type of media installed for correct operation.  It is the responsibility
  2143.       of the programmer to ensure that the diskette drive parameter table is
  2144.       correct.  Unpredictable results can occur otherwise (See BSDASTYP).
  2145.  
  2146.  
  2147.       This service will verify only a single sector with each call.  If needed,
  2148.       the Assembler source can easily be modified to verify more than one
  2149.       sector (up to an entire track).
  2150.  
  2151.       The verify service reads the specified sector and insures that it passes
  2152.       the CRC check.
  2153.  
  2154.       See Appendix C - Miscellaneous diskette information.
  2155.  
  2156.  
  2157.  
  2158.  
  2159.  
  2160.  
  2161.  
  2162.  
  2163.  
  2164.  
  2165.  
  2166.  
  2167.  
  2168.  
  2169.  
  2170.  
  2171.  
  2172.  
  2173.                        Copyright (c) 1987, AJM Software 
  2174.                                    -Page 32-
  2175.  
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  
  2181.  
  2182.  
  2183.  
  2184.  
  2185.  
  2186.  
  2187.       BSDREAD  - Read a sector from a disk
  2188.  
  2189.       Usage - Call BsDRead(Buffer$, Drive$, Head%, Track%, Sector%, Rc%)
  2190.  
  2191.          Buffer$        The string where the data read from disk will be placed
  2192.                         into.
  2193.  
  2194.          Drive$         Letter designation for to drive containing the disk
  2195.                         to be read.
  2196.  
  2197.          Head%          Cylinder head containing the track to be read.
  2198.  
  2199.          Track%         Track containing sector to be read.
  2200.  
  2201.          Sector%        Relative ID of the sector to be read.
  2202.  
  2203.          Rc%            Return code - see function BSDSTAT
  2204.  
  2205.  
  2206.       Programming notes:
  2207.  
  2208.       It is the responsibility of the programmer to ensure that Buffer$ is long
  2209.       enough to hold the sector read from disk (usually 512 bytes).  If it is
  2210.       not long enough, the results are unpredictable.  Generally you will see a
  2211.       'String Space Corrupt' message returned from BASIC.
  2212.  
  2213.       This service will read only a single sector with each call.  If necessary,
  2214.       the Assembler source can easily be modified to read more than one sector
  2215.       (up to an entire track).
  2216.  
  2217.       See Appendix C - Miscellaneous diskette information.
  2218.  
  2219.  
  2220.  
  2221.  
  2222.  
  2223.  
  2224.  
  2225.  
  2226.  
  2227.  
  2228.  
  2229.  
  2230.  
  2231.  
  2232.  
  2233.  
  2234.  
  2235.  
  2236.  
  2237.  
  2238.  
  2239.                        Copyright (c) 1987, AJM Software 
  2240.                                    -Page 33-
  2241.  
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248.  
  2249.  
  2250.  
  2251.  
  2252.  
  2253.       BSDWRIT  - Write a sector to disk
  2254.  
  2255.       Usage - Call BsDWrit(Buffer$, Drive$, Head%, Track%, Sector%, Rc%)
  2256.  
  2257.          Buffer$        The string containing the data to be written to disk.
  2258.  
  2259.          Drive$         Letter designation for to drive containing the disk
  2260.                         to be written
  2261.  
  2262.          Head%          Cylinder head containing the track to be written.
  2263.  
  2264.          Track%         Track containing sector to be written.
  2265.  
  2266.          Sector%        Relative ID of the sector to be written.
  2267.  
  2268.          Rc%            Return code - see function BSDSTAT
  2269.  
  2270.  
  2271.       Programming notes:
  2272.  
  2273.       When testing, first backup your diskette.  It is very easy to inadver-
  2274.       tently erase usable data or render a diskette unusable with this service.
  2275.  
  2276.       This service will always write a complete sector.  If Buffer$ is shorter
  2277.       than the length of a sector (usually 512 bytes), the contents of the sec-
  2278.       tor written will be unpredictable.
  2279.  
  2280.       This service will write only a single sector with each call.  If needed,
  2281.       the Assembler source can easily be modified to write more than one sector
  2282.       (up to an entire track).
  2283.  
  2284.       See Appendix C - Miscellaneous diskette information.
  2285.  
  2286.  
  2287.  
  2288.  
  2289.  
  2290.  
  2291.  
  2292.  
  2293.  
  2294.  
  2295.  
  2296.  
  2297.  
  2298.  
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.                        Copyright (c) 1987, AJM Software 
  2306.                                    -Page 34-
  2307.  
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314.  
  2315.  
  2316.  
  2317.  
  2318.  
  2319.       BSDFMT   - Format a track on a disk
  2320.  
  2321.       Usage - Call BsDFmt(Buffer$, Drive$, Head%, Track%, Sector%, Rc%)
  2322.  
  2323.          Buffer$        The string containing the track format table (See Appen-
  2324.                         dix C).
  2325.  
  2326.          Drive$         Letter designation for to drive containing the diskette
  2327.                         to be formatted.
  2328.  
  2329.          Head%          Cylinder head containing the track to be formatted.
  2330.  
  2331.          Track%         Track containing sector to be formatted.
  2332.  
  2333.          Sector%        Number of sectors to be formatted.
  2334.  
  2335.          Rc%            Return code - see function BSDSTAT
  2336.  
  2337.  
  2338.       Programming notes:
  2339.  
  2340.  
  2341.       For 1.2 Meg drives, the diskette drive parameter table must reflect the
  2342.       type of media installed for correct operation.  It is the responsibility
  2343.       of the programmer to ensure that the diskette drive parameter table is
  2344.       correct.  Unpredictable results can occur otherwise (See BSDASTYP).
  2345.  
  2346.       When testing, first backup your diskette.  It is very easy to inadver-
  2347.       tently erase usable data or render a diskette unusable with this service.
  2348.  
  2349.       This service will always format a complete track.  If Sector% is less than
  2350.       the maximum number of sectors that can fit on that track, then the unfor-
  2351.       matted sectors will no longer be available.
  2352.  
  2353.       If you format track 0 on a diskette with this service, the diskette will
  2354.       not be usable until a boot record is written to sector 0.  If needed, the
  2355.       Assembler source code can be modified to write a boot record to the dis-
  2356.       kette.
  2357.  
  2358.  
  2359.  
  2360.  
  2361.  
  2362.  
  2363.  
  2364.  
  2365.  
  2366.  
  2367.  
  2368.  
  2369.  
  2370.  
  2371.                        Copyright (c) 1987, AJM Software 
  2372.                                    -Page 35-
  2373.  
  2374.  
  2375.  
  2376.  
  2377.  
  2378.  
  2379.  
  2380.  
  2381.  
  2382.  
  2383.  
  2384.  
  2385.  
  2386.                            The BIOS Miscellaneous Services
  2387.  
  2388.  
  2389.  
  2390.       Function Summary
  2391.  
  2392.  
  2393.       BSEQPMT  - Get installed equipment
  2394.  
  2395.       BSPINIT  - Initialize printer
  2396.  
  2397.       BSPSTAT  - Get printer status
  2398.  
  2399.       BSPRINT  - Print a string of characters
  2400.  
  2401.       BSPRTSC  - Print screen
  2402.  
  2403.  
  2404.  
  2405.  
  2406.  
  2407.  
  2408.  
  2409.  
  2410.  
  2411.  
  2412.  
  2413.  
  2414.  
  2415.  
  2416.  
  2417.  
  2418.  
  2419.  
  2420.  
  2421.  
  2422.  
  2423.  
  2424.  
  2425.  
  2426.  
  2427.  
  2428.  
  2429.  
  2430.  
  2431.  
  2432.  
  2433.  
  2434.  
  2435.  
  2436.  
  2437.                        Copyright (c) 1987, AJM Software 
  2438.                                    -Page 36-
  2439.  
  2440.  
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446.  
  2447.  
  2448.  
  2449.  
  2450.  
  2451.       BSEQPMT  - Get installed equipment
  2452.  
  2453.       Usage -
  2454.       Call BsEqpmt(RomDate$, RAM%, ExtRAM%, ExpRAM%, Printers%, RS232%,
  2455.       Floppies%, Gameport%, Disks%)
  2456.  
  2457.          RomDate$       ROM-BIOS revision date
  2458.  
  2459.          RAM%           Amount, in Kilobytes, of installed RAM.
  2460.  
  2461.          ExtRAM%        Amount, in Kilobytes, of extended memory.
  2462.  
  2463.          ExpRAM%        Amount, in 16K pages, of LIMM expanded memory.
  2464.  
  2465.          Printers%      Number of printer ports installed.
  2466.  
  2467.          Rs232%         Number of serial ports installed.
  2468.  
  2469.          Floppies%      Number of floppy disk drives installed.
  2470.  
  2471.          Gameport%      Number of gameports installed.
  2472.  
  2473.          Disks%         Number of hard disks installed.
  2474.  
  2475.  
  2476.       Programming notes:
  2477.  
  2478.       Some of these fields may not be reliable in certain hardware configura-
  2479.       tions.  Items to be wary about are RomDate$, ExtRAM%, and in particular,
  2480.       the number of hard disks.
  2481.  
  2482.  
  2483.  
  2484.  
  2485.  
  2486.  
  2487.  
  2488.  
  2489.  
  2490.  
  2491.  
  2492.  
  2493.  
  2494.  
  2495.  
  2496.  
  2497.  
  2498.  
  2499.  
  2500.  
  2501.  
  2502.  
  2503.                        Copyright (c) 1987, AJM Software 
  2504.                                    -Page 37-
  2505.  
  2506.  
  2507.  
  2508.  
  2509.  
  2510.  
  2511.  
  2512.  
  2513.  
  2514.  
  2515.  
  2516.  
  2517.       BSPINIT  - Initialize printer
  2518.  
  2519.       Usage - Call BsPInit(Printer%, Rc%)
  2520.  
  2521.          Printer%       The printer port number - 0 is LPT1, 1 is LPT2, etc.
  2522.  
  2523.          Rc%            Return code - see BSPSTAT
  2524.  
  2525.  
  2526.       Programming notes:
  2527.  
  2528.       This service will initialize the printer.  That is to say, it will:
  2529.  
  2530.          - Reset top-of-form
  2531.          - Return the printer to its default setup
  2532.          - poll the printer for printer status
  2533.  
  2534.  
  2535.  
  2536.  
  2537.  
  2538.  
  2539.  
  2540.  
  2541.  
  2542.  
  2543.  
  2544.  
  2545.  
  2546.  
  2547.  
  2548.  
  2549.  
  2550.  
  2551.  
  2552.  
  2553.  
  2554.  
  2555.  
  2556.  
  2557.  
  2558.  
  2559.  
  2560.  
  2561.  
  2562.  
  2563.  
  2564.  
  2565.  
  2566.  
  2567.  
  2568.  
  2569.                        Copyright (c) 1987, AJM Software 
  2570.                                    -Page 38-
  2571.  
  2572.  
  2573.  
  2574.  
  2575.  
  2576.  
  2577.  
  2578.  
  2579.  
  2580.  
  2581.  
  2582.  
  2583.       BSPSTAT  - Get printer status
  2584.  
  2585.       Usage - Call BsPStat(Printer%, Rc%)
  2586.  
  2587.          Printer%       The printer port number - 0 is LPT1, 1 is LPT2, etc.
  2588.  
  2589.          Rc%            Return code
  2590.  
  2591.  
  2592.       Programming notes:
  2593.  
  2594.       The return code is actually a series of bit settings that indicates the
  2595.       following conditions:
  2596.  
  2597.          -  Printer ready
  2598.          -  Acknowledge
  2599.          -  Out of paper
  2600.          -  I/O error (on some printers, this indicates an off-line condition)
  2601.          -  Timeout
  2602.          -  Selected
  2603.  
  2604.       When checking printer status, the 'selected' indicator tells you that the
  2605.       printer is on-line and ready to go.  Some printers will return a "Printer
  2606.       ready' status even when turned off (this, incidentally, is why Quickbasic
  2607.       will occasionally print to a printer that is turned off and never return
  2608.       an error condition).  Before issuing an LPRINT (or equivalent) command in
  2609.       Quickbasic, make sure that the printer is selected.
  2610.  
  2611.  
  2612.  
  2613.  
  2614.       ***************************** IMPORTANT *********************************
  2615.  
  2616.  
  2617.       See the next page for a Quickbasic program segment that properly inter-
  2618.       prets Rc%.
  2619.  
  2620.  
  2621.  
  2622.  
  2623.  
  2624.  
  2625.  
  2626.  
  2627.  
  2628.  
  2629.  
  2630.  
  2631.  
  2632.  
  2633.  
  2634.  
  2635.                        Copyright (c) 1987, AJM Software 
  2636.                                    -Page 39-
  2637.  
  2638.  
  2639.  
  2640.  
  2641.  
  2642.  
  2643.  
  2644.  
  2645.  
  2646.  
  2647.  
  2648.       The following code segment will extract the appropriate values.  It is
  2649.       included in the sample program archive(Registered owners only).
  2650.  
  2651.  
  2652.       Printer%          = 0                     'Use LPT1
  2653.       Call BsPStat(Printer%, Rc%)               'Get status of printer
  2654.  
  2655.       Printer.Ready%  =  (Rc% and 128) = 128   '1st bit indicates printer ready
  2656.       Acknowledge%    =  (Rc% and 64)  = 64    '2nd bit indicates Ack
  2657.       Out.of.Paper%   =  (Rc% and 32)  = 32    '3rd bit indicates out of paper
  2658.       IO.Error%       =  (Rc% and 8)   = 8     '5th bit indicates I/O Error
  2659.       Timeout%        =  (Rc% and 1)   = 1     '8th bit indicates Timeout
  2660.       Selected%       =  (Rc% and 16)  = 16    '4th bit indicates Selected
  2661.  
  2662.       Locate 1,1: Color 15,1: Cls
  2663.  
  2664.       If Printer.Ready% then
  2665.          Print "Printer at LPT1 reports Ready"
  2666.       End if
  2667.  
  2668.       If Acknowledge% then
  2669.          Print "Printer at LPT1 reports Acknowledge"
  2670.       End if
  2671.  
  2672.       If Out.of.Paper% then
  2673.          Print "Printer at LPT1 reports Out of Paper of Paper jam"
  2674.       End if
  2675.  
  2676.       If IO.Error% then
  2677.          Print "Printer at LPT1 reports I/O error or Printer off-line"
  2678.       End if
  2679.  
  2680.       If Timeout% then
  2681.          Print "Printer at LPT1 has timed out"
  2682.       End if
  2683.  
  2684.       If Selected% then
  2685.          Print "Printer at LPT1 is selected"
  2686.       End if
  2687.  
  2688.  
  2689.  
  2690.  
  2691.  
  2692.  
  2693.  
  2694.  
  2695.  
  2696.  
  2697.  
  2698.  
  2699.  
  2700.  
  2701.                        Copyright (c) 1987, AJM Software 
  2702.                                    -Page 40-
  2703.  
  2704.  
  2705.  
  2706.  
  2707.  
  2708.  
  2709.  
  2710.  
  2711.  
  2712.  
  2713.  
  2714.  
  2715.       BSPRINT  - Print a string of characters
  2716.  
  2717.       Usage - Call BsPrint(Text$, Printer%, Rc%)
  2718.  
  2719.          Text$          String to print
  2720.  
  2721.          Printer%       Printer port
  2722.  
  2723.          Rc%            Return code
  2724.  
  2725.  
  2726.       Programming notes:
  2727.  
  2728.       See BSPSTAT for an explanation of return codes.
  2729.  
  2730.       This service sends whatever is in Text$ to the appropriate printer port.
  2731.       All special printer codes such as NewLine, TopofForm, etc, will be inter-
  2732.       preted correctly by the printer.
  2733.  
  2734.  
  2735.  
  2736.  
  2737.  
  2738.  
  2739.  
  2740.  
  2741.  
  2742.  
  2743.  
  2744.  
  2745.  
  2746.  
  2747.  
  2748.  
  2749.  
  2750.  
  2751.  
  2752.  
  2753.  
  2754.  
  2755.  
  2756.  
  2757.  
  2758.  
  2759.  
  2760.  
  2761.  
  2762.  
  2763.  
  2764.  
  2765.  
  2766.  
  2767.                        Copyright (c) 1987, AJM Software 
  2768.                                    -Page 41-
  2769.  
  2770.  
  2771.  
  2772.  
  2773.  
  2774.  
  2775.  
  2776.  
  2777.  
  2778.  
  2779.  
  2780.       BSPRTSC  - Print screen
  2781.  
  2782.       Usage - Call BsPrtSc
  2783.  
  2784.  
  2785.       Programming notes:
  2786.  
  2787.       This service is the equivalent of pressing the 'PrtSc' key on the key-
  2788.       board.
  2789.  
  2790.       The screen will be printed to LPT1.
  2791.  
  2792.  
  2793.  
  2794.  
  2795.  
  2796.  
  2797.  
  2798.  
  2799.  
  2800.  
  2801.  
  2802.  
  2803.  
  2804.  
  2805.  
  2806.  
  2807.  
  2808.  
  2809.  
  2810.  
  2811.  
  2812.  
  2813.  
  2814.  
  2815.  
  2816.  
  2817.  
  2818.  
  2819.  
  2820.  
  2821.  
  2822.  
  2823.  
  2824.  
  2825.  
  2826.  
  2827.  
  2828.  
  2829.  
  2830.  
  2831.  
  2832.  
  2833.                        Copyright (c) 1987, AJM Software 
  2834.                                    -Page 42-
  2835.  
  2836.  
  2837.  
  2838.  
  2839.  
  2840.  
  2841.  
  2842.  
  2843.  
  2844.  
  2845.  
  2846.  
  2847.                               The BIOS AT Disk Services
  2848.  
  2849.  
  2850.  
  2851.       Function Summary
  2852.  
  2853.  
  2854.       BSDAPARM - Get current drive parameters
  2855.  
  2856.       BSDATST  - Test for drive ready
  2857.  
  2858.       BSDARST  - Alternate disk reset
  2859.  
  2860.       BSDARCL  - Recalibrate drive
  2861.  
  2862.       BSDADIAG - Perform controller diagnostics
  2863.  
  2864.       BSDASTAT - Detect diskette change
  2865.  
  2866.       BSDATYPE - Get disk type
  2867.  
  2868.       BSDASTYP - Set diskette type
  2869.  
  2870.       BSDASEEK - Position heads over a specified cylinder
  2871.  
  2872.  
  2873.  
  2874.       *********************** IMPORTANT *************************
  2875.  
  2876.       These functions are documented only for AT type machines.  These machines
  2877.       generally use a 1.2 Meg diskette drive whose characteristics are different
  2878.       enough from the 360KB drive to warrant these new BIOS services.  These
  2879.       services also provide additional support for hard disks.
  2880.  
  2881.  
  2882.  
  2883.  
  2884.  
  2885.  
  2886.  
  2887.  
  2888.  
  2889.  
  2890.  
  2891.  
  2892.  
  2893.  
  2894.  
  2895.  
  2896.  
  2897.  
  2898.  
  2899.                        Copyright (c) 1987, AJM Software 
  2900.                                    -Page 43-
  2901.  
  2902.  
  2903.  
  2904.  
  2905.  
  2906.  
  2907.  
  2908.  
  2909.  
  2910.  
  2911.  
  2912.  
  2913.       BSDAPARM - Get current drive parameters
  2914.  
  2915.       Usage - Call BsDAParm(Drive$, Heads%, Cylinders%, Sectors%)
  2916.  
  2917.          Drive$         Letter designation of the target drive
  2918.  
  2919.          Heads%         Maximum number of heads on the disk
  2920.  
  2921.          Cylinders%     Maximum number of Cylinders/Head
  2922.  
  2923.          Sectors%       Maximum number of Sectors/Cylinder
  2924.  
  2925.  
  2926.       Programming notes:
  2927.  
  2928.       This service will not function on a diskette drive.  It is intended for
  2929.       use with a hard disk only.
  2930.  
  2931.  
  2932.  
  2933.  
  2934.  
  2935.  
  2936.  
  2937.  
  2938.  
  2939.  
  2940.  
  2941.  
  2942.  
  2943.  
  2944.  
  2945.  
  2946.  
  2947.  
  2948.  
  2949.  
  2950.  
  2951.  
  2952.  
  2953.  
  2954.  
  2955.  
  2956.  
  2957.  
  2958.  
  2959.  
  2960.  
  2961.  
  2962.  
  2963.  
  2964.  
  2965.                        Copyright (c) 1987, AJM Software 
  2966.                                    -Page 44-
  2967.  
  2968.  
  2969.  
  2970.  
  2971.  
  2972.  
  2973.  
  2974.  
  2975.  
  2976.  
  2977.  
  2978.  
  2979.  
  2980.       BSDATST  - Test for drive ready
  2981.  
  2982.       Usage - Call DsDATst(Drive$, Rc%)
  2983.  
  2984.          Drive$         Letter designation of the target drive
  2985.  
  2986.          Rc%            Return code
  2987.  
  2988.  
  2989.       Programming notes:
  2990.  
  2991.       This service will not function on a diskette drive.  It is intended for
  2992.       use with a hard disk only.
  2993.  
  2994.       This service tests the status of the DRIVE READY signal on the selected
  2995.       drive.
  2996.  
  2997.       See BSDSTAT documentation for an explanation of return codes.
  2998.  
  2999.  
  3000.  
  3001.  
  3002.  
  3003.  
  3004.  
  3005.  
  3006.  
  3007.  
  3008.  
  3009.  
  3010.  
  3011.  
  3012.  
  3013.  
  3014.  
  3015.  
  3016.  
  3017.  
  3018.  
  3019.  
  3020.  
  3021.  
  3022.  
  3023.  
  3024.  
  3025.  
  3026.  
  3027.  
  3028.  
  3029.  
  3030.  
  3031.                        Copyright (c) 1987, AJM Software 
  3032.                                    -Page 45-
  3033.  
  3034.  
  3035.  
  3036.  
  3037.  
  3038.  
  3039.  
  3040.  
  3041.  
  3042.  
  3043.  
  3044.  
  3045.       BSDARST  - Alternate disk reset
  3046.  
  3047.       Usage - Call BsDARst(Drive$, Rc%)
  3048.  
  3049.          Drive$         Letter designation of the target drive
  3050.  
  3051.          Rc%            Return code
  3052.  
  3053.  
  3054.       Programming notes:
  3055.  
  3056.       This service is the same as BSDRESET documented earlier except that
  3057.       BSDARST can be used only with hard disk controllers.
  3058.  
  3059.       See BSDSTAT documentation for an explanation of return codes.
  3060.  
  3061.  
  3062.  
  3063.  
  3064.  
  3065.  
  3066.  
  3067.  
  3068.  
  3069.  
  3070.  
  3071.  
  3072.  
  3073.  
  3074.  
  3075.  
  3076.  
  3077.  
  3078.  
  3079.  
  3080.  
  3081.  
  3082.  
  3083.  
  3084.  
  3085.  
  3086.  
  3087.  
  3088.  
  3089.  
  3090.  
  3091.  
  3092.  
  3093.  
  3094.  
  3095.  
  3096.  
  3097.                        Copyright (c) 1987, AJM Software 
  3098.                                    -Page 46-
  3099.  
  3100.  
  3101.  
  3102.  
  3103.  
  3104.  
  3105.  
  3106.  
  3107.  
  3108.  
  3109.  
  3110.  
  3111.       BSDARCL  - Recalibrate drive
  3112.  
  3113.       Usage - Call BsDARcl(Drive$, Rc%)
  3114.  
  3115.          Drive$         Letter designation of the target drive
  3116.  
  3117.          Rc%            Return code
  3118.  
  3119.  
  3120.       Programming notes:
  3121.  
  3122.       This service will not function on a diskette drive.  It is intended for
  3123.       use with a hard disk only.
  3124.  
  3125.       This service instructs the specified drive to recalibrate.  This is done
  3126.       by seeking track 0.
  3127.  
  3128.       This service should be used only after an error has been detected and
  3129.       before any retries are made.
  3130.  
  3131.       See BSDSTAT documentation for an explanation of return codes.
  3132.  
  3133.  
  3134.  
  3135.  
  3136.  
  3137.  
  3138.  
  3139.  
  3140.  
  3141.  
  3142.  
  3143.  
  3144.  
  3145.  
  3146.  
  3147.  
  3148.  
  3149.  
  3150.  
  3151.  
  3152.  
  3153.  
  3154.  
  3155.  
  3156.  
  3157.  
  3158.  
  3159.  
  3160.  
  3161.  
  3162.  
  3163.                        Copyright (c) 1987, AJM Software 
  3164.                                    -Page 47-
  3165.  
  3166.  
  3167.  
  3168.  
  3169.  
  3170.  
  3171.  
  3172.  
  3173.  
  3174.  
  3175.  
  3176.  
  3177.       BSDADIAG - Perform controller diagnostics
  3178.  
  3179.       Usage BsDADiag(Rc%)
  3180.  
  3181.          Rc%            Return code
  3182.  
  3183.  
  3184.       Programming notes:
  3185.  
  3186.       This service will not function on a diskette drive.  It is intended for
  3187.       use with a hard disk only.
  3188.  
  3189.       This service instructs the hard disk controller to perform its internal
  3190.       diagnostic routines.
  3191.  
  3192.       See BSDSTAT documentation for an explanation of return codes.
  3193.  
  3194.  
  3195.  
  3196.  
  3197.  
  3198.  
  3199.  
  3200.  
  3201.  
  3202.  
  3203.  
  3204.  
  3205.  
  3206.  
  3207.  
  3208.  
  3209.  
  3210.  
  3211.  
  3212.  
  3213.  
  3214.  
  3215.  
  3216.  
  3217.  
  3218.  
  3219.  
  3220.  
  3221.  
  3222.  
  3223.  
  3224.  
  3225.  
  3226.  
  3227.  
  3228.  
  3229.                        Copyright (c) 1987, AJM Software 
  3230.                                    -Page 48-
  3231.  
  3232.  
  3233.  
  3234.  
  3235.  
  3236.  
  3237.  
  3238.  
  3239.  
  3240.  
  3241.  
  3242.  
  3243.       BSDASTAT - Detect diskette change
  3244.  
  3245.       Usage - Call BsDAStat(Drive$, Rc%)
  3246.  
  3247.          Drive$         Letter designation of the target drive
  3248.  
  3249.          Rc%            Return code
  3250.  
  3251.  
  3252.       Programming notes:
  3253.  
  3254.       This service will detect whether or not the disk drive door has been
  3255.       opened since the last disk operation.  It is meaningless for hard drives.
  3256.  
  3257.       This service should be used only with those drives that can detect disk
  3258.       changes (See BSDATYPE).
  3259.  
  3260.       See BSDSTAT documentation for an explanation of return codes.
  3261.  
  3262.  
  3263.  
  3264.  
  3265.  
  3266.  
  3267.  
  3268.  
  3269.  
  3270.  
  3271.  
  3272.  
  3273.  
  3274.  
  3275.  
  3276.  
  3277.  
  3278.  
  3279.  
  3280.  
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288.  
  3289.  
  3290.  
  3291.  
  3292.  
  3293.  
  3294.  
  3295.                        Copyright (c) 1987, AJM Software 
  3296.                                    -Page 49-
  3297.  
  3298.  
  3299.  
  3300.  
  3301.  
  3302.  
  3303.  
  3304.  
  3305.  
  3306.  
  3307.  
  3308.  
  3309.       BSDATYPE - Get disk type
  3310.  
  3311.       Usage - Call BsDAType(Drive$, Rc%)
  3312.  
  3313.          Drive$         Letter designation of the target drive
  3314.  
  3315.          Rc%            0 - drive is not present
  3316.                         1 - diskette without change detection
  3317.                         2 - diskette with change detection%
  3318.                         3 - fixed disk
  3319.  
  3320.  
  3321.       Programming notes:
  3322.  
  3323.       This service will work with both hard and floppy disk drives.
  3324.  
  3325.  
  3326.  
  3327.  
  3328.  
  3329.  
  3330.  
  3331.  
  3332.  
  3333.  
  3334.  
  3335.  
  3336.  
  3337.  
  3338.  
  3339.  
  3340.  
  3341.  
  3342.  
  3343.  
  3344.  
  3345.  
  3346.  
  3347.  
  3348.  
  3349.  
  3350.  
  3351.  
  3352.  
  3353.  
  3354.  
  3355.  
  3356.  
  3357.  
  3358.  
  3359.  
  3360.  
  3361.                        Copyright (c) 1987, AJM Software 
  3362.                                    -Page 50-
  3363.  
  3364.  
  3365.  
  3366.  
  3367.  
  3368.  
  3369.  
  3370.  
  3371.  
  3372.  
  3373.  
  3374.  
  3375.       BSDASTYP - Set diskette type
  3376.  
  3377.       Usage - Call BsDASTyp(Drive$, Type%, Rc%)
  3378.  
  3379.          Drive$         Letter designation of the target drive
  3380.  
  3381.          Type%          1 - Double-density drive
  3382.                         2 - 360KB diskette in a 1.2MB drive
  3383.                         3 - 1.2MB diskette in a 1.2MB drive
  3384.  
  3385.          Rc%            Return code
  3386.  
  3387.  
  3388.       Programming notes:
  3389.  
  3390.       This service is meaningless for fixed disks.
  3391.  
  3392.       This service should be used prior to all Format and Verify requests to any
  3393.       1.2MB diskette drives.
  3394.  
  3395.       See BSDSTAT for an explanation of return codes.
  3396.  
  3397.  
  3398.  
  3399.  
  3400.  
  3401.  
  3402.  
  3403.  
  3404.  
  3405.  
  3406.  
  3407.  
  3408.  
  3409.  
  3410.  
  3411.  
  3412.  
  3413.  
  3414.  
  3415.  
  3416.  
  3417.  
  3418.  
  3419.  
  3420.  
  3421.  
  3422.  
  3423.  
  3424.  
  3425.  
  3426.  
  3427.                        Copyright (c) 1987, AJM Software 
  3428.                                    -Page 51-
  3429.  
  3430.  
  3431.  
  3432.  
  3433.  
  3434.  
  3435.  
  3436.  
  3437.  
  3438.  
  3439.  
  3440.  
  3441.  
  3442.       BSDASEEK - Position heads over a specified cylinder
  3443.  
  3444.       Usage - Call BsDASeek(Drive$, Head%, Cylinder%, Rc%)
  3445.  
  3446.          Drive$         Letter designation of the target drive
  3447.  
  3448.          Head%          Head to be positioned
  3449.  
  3450.          Cylinder%      Cylinder over which the head will be positioned.
  3451.  
  3452.          Rc%            Return code
  3453.  
  3454.  
  3455.       Programming notes:
  3456.  
  3457.       This service will not function on a diskette drive.  It is intended for
  3458.       use with a hard disk only.
  3459.  
  3460.       This service can be used to park your fixed disk
  3461.  
  3462.       See BSDSTAT for an explanation of return codes.
  3463.  
  3464.  
  3465.  
  3466.  
  3467.  
  3468.  
  3469.  
  3470.  
  3471.  
  3472.  
  3473.  
  3474.  
  3475.  
  3476.  
  3477.  
  3478.  
  3479.  
  3480.  
  3481.  
  3482.  
  3483.  
  3484.  
  3485.  
  3486.  
  3487.  
  3488.  
  3489.  
  3490.  
  3491.  
  3492.  
  3493.                        Copyright (c) 1987, AJM Software 
  3494.                                    -Page 52-
  3495.  
  3496.  
  3497.  
  3498.  
  3499.  
  3500.  
  3501.  
  3502.  
  3503.  
  3504.  
  3505.  
  3506.  
  3507.                                       Appendix A
  3508.  
  3509.                                  Keyboard Scan Codes
  3510.  
  3511.  
  3512.       Decimal           Character
  3513.  
  3514.       3                 NUL
  3515.       15                Shft-tab
  3516.       16-25             Alt+(Q,W,E,R,T,Y,U,I,O,P)
  3517.       30-38             Alt+(A,S,D,F,G,H,J,K,L)
  3518.       44-50             Alt+(Z,X,C,V,B,N,M)
  3519.       59,68             F1-F10
  3520.       71                Home
  3521.       72                Up cursor
  3522.       73                PgUp
  3523.       75                Left cursor
  3524.       77                Right cursor
  3525.       79                End
  3526.       80                Down cursor
  3527.       81                PgDn
  3528.       82                Ins
  3529.       83                Del
  3530.       84-93             Shft-(F1-F10)
  3531.       94-103            Ctrl-(F1-F10)
  3532.       104-113           Alt+(F1-F10)
  3533.       114               PrtSc
  3534.       115               Left cursor
  3535.       116               Right cursor
  3536.       117               End
  3537.       118               PgDn
  3538.       119               Home
  3539.       120-131           Alt+(1,2,3,4,5,6,7,8,9,0,-,=)
  3540.       132               PgUp
  3541.  
  3542.  
  3543.  
  3544.  
  3545.  
  3546.  
  3547.  
  3548.  
  3549.  
  3550.  
  3551.  
  3552.  
  3553.  
  3554.  
  3555.  
  3556.  
  3557.  
  3558.  
  3559.                        Copyright (c) 1987, AJM Software 
  3560.                                    -Page 53-
  3561.  
  3562.  
  3563.  
  3564.  
  3565.  
  3566.  
  3567.  
  3568.  
  3569.  
  3570.  
  3571.  
  3572.  
  3573.                                       Appendix B
  3574.  
  3575.                                      BASIC Colors
  3576.  
  3577.  
  3578.       Color code               Color
  3579.  
  3580.          0                     Black
  3581.          1                     Blue
  3582.          2                     Green
  3583.          3                     Cyan
  3584.          4                     Red
  3585.          5                     Magenta
  3586.          6                     Brown
  3587.          7                     White
  3588.          8                     Gray
  3589.          9                     Light Blue
  3590.          10                    Light Green
  3591.          11                    Light Cyan
  3592.          12                    Light Red
  3593.          13                    Light Magenta
  3594.          14                    Yellow
  3595.          15                    High-Intensity White
  3596.  
  3597.  
  3598.       Notes:
  3599.  
  3600.       The only valid background colors are 0-7.
  3601.  
  3602.       Add 16 (sixteen) to the color to cause blinking.
  3603.  
  3604.  
  3605.  
  3606.  
  3607.  
  3608.  
  3609.  
  3610.  
  3611.  
  3612.  
  3613.  
  3614.  
  3615.  
  3616.  
  3617.  
  3618.  
  3619.  
  3620.  
  3621.  
  3622.  
  3623.  
  3624.  
  3625.                        Copyright (c) 1987, AJM Software 
  3626.                                    -Page 54-
  3627.  
  3628.  
  3629.  
  3630.  
  3631.  
  3632.  
  3633.  
  3634.  
  3635.  
  3636.  
  3637.  
  3638.  
  3639.                                       Appendix C
  3640.  
  3641.                               About Disks and Diskettes
  3642.  
  3643.  
  3644.       This Appendix is available only to registered users until December 1,
  3645.       1987.  It consists of a discussion about topics:
  3646.  
  3647.          - disk and diskette formats
  3648.  
  3649.          - the FAT
  3650.  
  3651.          - Formatting a diskette
  3652.  
  3653.          - Copy protection
  3654.  
  3655.          - the 1.2MB drive and how to use it
  3656.  
  3657.          - Diskette drive interrupts
  3658.  
  3659.  
  3660.  
  3661.  
  3662.  
  3663.  
  3664.  
  3665.  
  3666.  
  3667.  
  3668.  
  3669.  
  3670.  
  3671.  
  3672.  
  3673.  
  3674.  
  3675.  
  3676.  
  3677.  
  3678.  
  3679.  
  3680.  
  3681.  
  3682.  
  3683.  
  3684.  
  3685.  
  3686.  
  3687.  
  3688.  
  3689.  
  3690.  
  3691.                        Copyright (c) 1987, AJM Software 
  3692.                                    -Page 55-
  3693.  
  3694.  
  3695.  
  3696.  
  3697.