home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / ST_NEWS / STN_01_C.MSA / DATA_DOC11 < prev    next >
Text File  |  1994-03-14  |  21KB  |  633 lines

  1.  üALL ABOUT XBIOS FUNCTIONS Çby Richard Karsmakers
  2.  
  3. Originally  published  in üST NEWSÇ Volume 1 Issue  5,  launched  on 
  4. October 5th 1986.
  5.  
  6. ü16 keytbl
  7.  
  8. ÇExample: move.l capslock,-(sp)
  9.          move.l shift,-(sp)
  10.          move.l normal,-(sp)
  11.          move.w #16,-(sp)
  12.          trap #14
  13.          addq.l #14,sp
  14.  
  15. This  function enables you to redefine the keyboard tables  (3  in 
  16. all). Therefore, you'll have to specify the addresses on which the 
  17. tables  are located for normal keys ('normal'),  keys  with  Shift 
  18. ('shift') and keys with Caps Lock ('capslock'). Each table must be 
  19. 128 bytes in length.  The function returns the pointer to a  table 
  20. in  which all three vectors are written.  If one of  the  keyboard 
  21. tables should not be changed, you should specify -1 instead of the 
  22. memory  address.  The tables are scanned through the  key-scancode 
  23. and  they will result in giving the ASCII-code belonging  to  that 
  24. key.
  25.  
  26. ü17 randomÇ
  27.  
  28. Example: move.w #17,-(sp)
  29.          trap #14
  30.          addq.l #2,sp
  31.  
  32. This function returns a 24-bit random number. Bits 24-31 will be 0 
  33. (cleared). At each call of this function, one will get a different 
  34. random  number.  At each system power-up,  another  starting-value 
  35. will be generated.
  36.  
  37. ü
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45. 18 protobtÇ
  46.  
  47. Example: move.w execflag,-(sp)
  48.          move.w disktype,-(sp)
  49.          move.l serialnr,-(sp)
  50.          move.l buffer,-(sp)
  51.          move.w #18,-(sp)
  52.          trap #14
  53.          add.l #14,sp
  54.  
  55. This function enables you to create a boot sector. The boot sector 
  56. is  located  on track 1,  sector 0 and tells to TOS all  kinds  of 
  57. things about the disk format,  e.g. disk type. If this boot sector 
  58. is set to be executable,  the Operating System can be loaded. With 
  59. this function you can change or create a boot sector.
  60. 'execflag' is used to specify if the boot sector is executable  or 
  61. not:
  62.          0        Not executable
  63.          1        Executable
  64.         -1        The boot sector stays like it was
  65.  
  66.  
  67. 'disktype' can have one of the following values:
  68.          0        40 tracks, single sided (180K)
  69.          1        40 tracks, double sided (360K)
  70.          2        80 tracks, single sided (360K)
  71.          3        80 tracks, double sided (720K)
  72. 'serialnr'  is a 24-bit serial number,  that will be written  into 
  73. the  bootsector.  This serial number is supposed to be  never  the 
  74. same on any disk,  and TOS therefore uses it to check if a disk is 
  75. changed.  If  you  specify  a  value larger  than  24  bits  (e.g. 
  76. $01000000),  a random serial number will be created with  function 
  77. number 18 (see previous page).  If it's -1, the serial number will 
  78. not be changed.  In this part of the disk,  a serious error can be 
  79. found.  For example,  when one formats a disk with the program "ST 
  80. Happy + Maxiformatter" it will always have the same serial number. 
  81. If you have for instance opened a folder, and if you change a disk 
  82. and then hit the ESC key,  you will get a garbled directory (which 
  83. can cause a system crash sometimes).  Normally, you'd get an empty 
  84. directory.
  85. 'buffer' is the pointer to a 512-byte buffer, located somewhere in 
  86. memory,  that  contains  the  contents of the boot  sector  to  be 
  87. written.
  88.  
  89. A bootsector is normally built up like this:
  90.  
  91. Address:        80 Track SS:      80 Track DS:
  92.  
  93.  0-1             Branch-instruction on boot-code if executable
  94.  2-7             'Loader'
  95.  8-10            24-bit serial number
  96. 11-12    BPS     512               512
  97. 13       SPC       2                 2
  98. 14-15    RES       1                 1
  99. 16       FAT       2                 2
  100. 17-18    DIR     112               112
  101. 19-20    SEC     720              1440
  102. 21       MEDIA   248               249
  103. 22-23    SPF       5                 5
  104. 24-25    SPT       9                 9
  105. 26-27    NSIDE     1                 2
  106. 28-29    NHID      0                 0
  107.  
  108.  
  109.  
  110.  
  111. 30-31    EXECFLG
  112. 32-33    LDMODE
  113. 34-35    SSECT
  114. 36-37    SECTCNT
  115. 38-41    LDADDR
  116. 42-45    FATBUF
  117. 46-56    FNAME
  118. 57       (Reserved)
  119. 58-509   BOOTIT Code
  120. 510-511  CHECKSUM
  121.  
  122. 'Loader' is for use with several programming tools, to enable them 
  123. to recognize a Loader boot sector.
  124. 'BPS'  is the number of bytes per sector.  Normally,  this is  512 
  125. bytes but it can also be 1024 bytes or another value.
  126. 'SPC' is the number of sectors per cluster.  Normally,  this is 2, 
  127. but it is possible to format a disk so that it is 1 or maybe 3  or 
  128. more.  The smaller the number,  the more economical is disk  usage 
  129. (with a value of 2,  2*512=1024 bytes are allocated even for a  1-
  130. byte file!).
  131. 'RES'  is the number of reserved sectors at the beginning  of  the 
  132. disk, including the boot sector.
  133. 'FAT'  is  the number of FATs (File  Allocation  Tables;  one  can 
  134. compare it with the Block Availability Map or BAM on the Commodore 
  135. 1541 disk drives) on a disk. The more FATs, the safer is your data 
  136. on the disk. But it takes quite a lot of space as well.
  137. 'DIR'  is  the maximal number of directory entries on  a  disk.  A 
  138. directory entry is any entry on the disk's root directory (so  all 
  139. the  names that appear on a disk drive window once  you've  opened 
  140. it, including the folders).
  141. 'SEC' is the total number of sectors on your disk.
  142. 'MEDIA'  is the Media Descriptor Byte.  ST BIOS doesn't  use  this 
  143. byte, but other file systems might!
  144. 'SPF'  is  the number of sectors that are included  in  each  FATY 
  145. entry (read more about the FAT in previous issues of üST NEWSÇ - the 
  146. articles about disk manipulation in issues 2 and 3).
  147. 'SPT' is the number of sectors per track.  This value is  normally 
  148. 9, but can range from 0 to 11 theoretically (1 to 10 practically).
  149. 'NSIDE' is the number of sides on the disk.  Logically,  this will 
  150. be 1 on any single-sided disk, and 2 on any double sided disk.
  151. 'NHID'  is  the number of "Hidden" sectors on the  disk.  ST  BIOS 
  152. ignores this value for floppies.
  153.  
  154.  
  155. 'EXECFLG'  is  a  word  that is  copied  to  the  system  variable 
  156. _cmdload. As you could have read in üST NEWSÇ Volume 1 Issue 2, when 
  157. this  system variable is set to 0,  the desktop will appear  after 
  158. booting.  If set to nonzero,  TOS will try to load an  application 
  159. (DOS  shell,  etc.)  first.  An example of an application  is  the 
  160. Command Shell of Atari. The file must be called COMMAND.PRG.
  161. 'LDMODE' specifies the load mode. If it is zero, the file with the 
  162. name 'FNAME' will be loaded and executed.  If 'LDMODE' is nonzero, 
  163. however,  'SECTCNT'  sectors  (starting at logical  sector  number 
  164. 'SSECT') will be loaded and executed.
  165. 'SSECT' is the logical sector number to start loading  from.  This 
  166. value is only useful when 'LDMODE' is nonzero.
  167. 'SECTCNT'  is the number of sectors to load.  Like  'SSECT',  this 
  168. value is only useful when 'LDMODE' is nonzero.
  169. 'LDADDR'  is the memory-address on which a file (or sectors)  will 
  170. be loaded. In case of TOS on disk, this will be $40000.
  171. 'FATBUF'  points to a memory location where the FAT-and  directory 
  172. sectors can be put.
  173. 'FNAME'  is  the  filename of the file that will  be  loaded  when 
  174. 'LDMODE' equals zero.  It consists of the normal eight  characters 
  175. of  the  name,   together  with  three  characters  for  the  file 
  176. extension.
  177. 'BOOTIT' is bootcode.
  178.  
  179. Because the bootsector is MS-DOS 2.x compatible,  all 16-bit words 
  180. are written in 8086-format: Low-byte first, High-byte second.
  181.  
  182. ü19 flopver
  183.  
  184. ÇExample: move.w count,-(sp)
  185.          move.w side,-(sp)
  186.          move.w track,-(sp)
  187.          move.w sector,-(sp)
  188.          move.w device,-(sp)
  189.          clr.l -(sp)
  190.          move.l buffer,-(sp)
  191.          move.w #19,-(sp)
  192.          trap #14
  193.          add.l #20,sp
  194.  
  195. This  function enables you to verify one or several sectors  of  a 
  196. disk.  The  sectors will be read from disk and compared  with  the 
  197. contents  of  a buffer.  The parameters have the same  meaning  as 
  198. those explained by the commands to read or write sectors. When the 
  199. contents  of  the  buffer  are the same as  the  contents  of  the 
  200. sectors,  the function returns the value 0.  When an error occurs, 
  201. you  will find that (as a negative value) in D0.  The error  codes 
  202. are explained by the function 'floprd'.
  203. When  it turns out that one or more sectors do not match with  the 
  204. buffer contents, you will be able to find a list of bad sectors in 
  205. the  buffer you specified,  each as a longword.  The  last  sector 
  206. number will be marked by a zero after it.
  207. When  you use the BIOS function 5 (rwabs),   and when  the  system 
  208. variable _fverify is set (that is the variable at location  $444), 
  209. sectors are automatically verified.
  210.  
  211. ü20 scrdmpÇ
  212.  
  213. Example: move.w #20,-(sp)
  214.          trap #14
  215.          addq.l #2,sp
  216.  
  217.  
  218.  
  219.  
  220.  
  221. This  function  makes it possible to make a screen hardcopy  on  a 
  222. printer that is hooked up to your ST. Thereby, XBIOS uses the pre-
  223. set printer parameters. This function can be called at any time by 
  224. simultaneously  pressing  ALTERNATE and HELP  or  choosing  "Print 
  225. Screen" from the Desktop ("Options").
  226.  
  227. ü21 cursconf
  228. Ç
  229. Example: move.w rate,-(sp)
  230.          move.w function,-(sp)
  231.          move.w #21,-(sp)
  232.          trap #14
  233.          addq.l #6,sp
  234.  
  235. This function can specify the function of the cursor (in case  you 
  236. didn't  know:  that's the small black rectangle somewhere  on  the 
  237. screen of you're working with First Word (Plus)).
  238.  
  239.  
  240.  
  241.  
  242.  
  243. 'function' can have one of the following values:
  244.          0        Turn cursor off
  245.          1        Turn cursor on
  246.          2        Flashing cursor
  247.          3        Non-flashing cursor
  248.          4        Set cursor flash-rate
  249.          5        Get cursor flash-rate
  250.  
  251. The  value of 'rate' depends on if you're using a monochrome-or  a 
  252. color  video  display.  With a monochrome monitor this is  70  Hz, 
  253. whereas this value if 50 Hz for color monitors.  When you want  to 
  254. change  the flash-rate,  only then you'll have to use  the  'rate' 
  255. parameter.  Example:  you can specify 30 if you want the cursor to 
  256. invert after every 30/70th second on a monochrome monitor or every 
  257. 30/50th second on a color display.
  258.  
  259. ü22 settimeÇ
  260.  
  261. Example: move.l time,-(sp)
  262.          move.w #22,-(sp)
  263.          trap #14
  264.          addq.l #6,sp
  265. This function enables you to set the date and time of the  system. 
  266. Therefore you must set up the longword like this:
  267.          Bit  0- 4 Seconds/2
  268.          Bit  5-10 Minutes
  269.          Bit 11-15 Hours
  270.          Bit 16-20 Day 1-31
  271.          Bit 21-24 Month 1-12
  272.          Bit 25-31 Year 0-119 (minus Offset 1980)
  273.  
  274. ü23 gettimeÇ
  275.  
  276. Example: move.w #23,-(sp)
  277.          trap #14
  278.          addq.l #2,sp
  279.  
  280. This  function returns the current date and time of the system  in 
  281. D0.
  282.  
  283. ü
  284.  
  285.  
  286.  
  287. 24 bioskeysÇ
  288.  
  289. Example: move.w #24,-(sp)
  290.          trap #14
  291.          addq.l #2,sp
  292.  
  293. If you have changed the keyboard table(s) with XBIOS 16  (keytbl), 
  294. this function enables you to get back to the standard key  tables. 
  295. It is handy if you call this routine after ending your own program 
  296. that uses another keyboard table.
  297.  
  298. ü25 ikbdwsÇ
  299.  
  300. Example: move.l pointer,-(sp)
  301.          move.w quantity,-(sp)
  302.          move.w #25,-(sp)
  303.          trap #14
  304.          addq.l #8,sp
  305.  
  306. This  function  allows  you  to  send  commands  to  the  keyboard 
  307. processor.
  308.  
  309. 'pointer' is the address of a string  that contains the commands.
  310. 'quantity' is the number of bytes in the string,  of which 1  must 
  311. be substracted.
  312.  
  313. ü26 jdisintÇ
  314.  
  315. Example: move.w number,-(sp)
  316.          move.w #26,-(sp)
  317.          trap #14
  318.          addq.l #4,sp
  319.  
  320. This  function  allows the user to halt an interrupt  of  the  MFP 
  321. 68901 processor.
  322. 'number' is the number of the interrupt, from 0 to 15.
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331. These are the Interrupts of the MFP 68901 processor:
  332.          0        Centronics Busy
  333.          1        RS232 DCD
  334.          2        RS232 CTS
  335.          3        Unused
  336.          4        RS232 Baudrate generator, Timer D
  337.          5        Timer C
  338.          6        Keyboard and MIDI ACIAs
  339.          7        Floppy Controller and DMA
  340.          8        Linefeed counter, Timer B
  341.          9        RS232 Sending error
  342.         10        RS232 Sending buffer empty
  343.         11        RS232 Receivance error
  344.         12        RS232 Receivance buffer filled
  345.         13        System Clock Timer A
  346.         14        RS232 Ring Indicator
  347.         15        Monochrome Monitor Detect
  348.  
  349. For more information about interrupt levels, etc., please refer to 
  350. pages 268-274 in "ST Intern", chapter 3.5.1.
  351.  
  352. ü
  353. 27 jenabintÇ
  354.  
  355. Example: move.w number,-(sp)
  356.          move.w #27,-(sp)
  357.          trap #14
  358.          addq.l #4,sp
  359.  
  360. This function is the opponent to the 'jdisint' function  described 
  361. above. It is used to enable a MFP Interrupt again.
  362. 'number' is the number of the interrupt level to  reactivate.  See 
  363. above for a list of MFP Interrupt levels.
  364.  
  365. ü28 giaccessÇ
  366.  
  367. Example: move.w #register,-(sp)
  368.          move.w #data,-(sp)
  369.          move,w #28,-(sp)
  370.          trap #14
  371.          addq.l #6,sp
  372.  
  373.  
  374.  
  375. This functions lets you access the GI-soundchip.
  376. 'register' must be the soundchip's register number, ranging from 0 
  377. to15.  Bit  7  of the register number specifies  if  the  register 
  378. should be read from or written to:
  379.          0        Read
  380.          1        Write
  381. If  you want to write to a register,  'data' will have to  contain 
  382. the 8-bit value of the code to write.  When this function is  used 
  383. to read the register with the specified number,  you get the value 
  384. of that register.
  385.  
  386. ü29 offgibitÇ
  387.  
  388. Example: move.w #bitnumber,-(sp)
  389.          move.w #29,-(sp)
  390.          trap #14
  391.          addq.l #4,sp
  392.  
  393.  
  394.  
  395.  
  396.  
  397. This function sets a selected bit in port A of the Soundchip.  The 
  398. individual bits have the following meaning:
  399.          0        Floppy Select side 0/side 1
  400.          1        Floppy Select drive A
  401.          2        Floppy Select drive B
  402.          3        RS232 RTS (Request to Send)
  403.          4        RS232 DTR (Data Terminal Ready)
  404.          5        Centronics Stobe
  405.          6        General Purpose Output
  406.          7        Unused
  407.  
  408. ü30 ongibitÇ
  409.  
  410. Example: move.w #bitnumber,-(sp)
  411.          move.w #30,-(sp)
  412.          trap #14
  413.          addq.l #4,sp
  414.  
  415. This  function clears s selected bit in Port A of  the  Soundchip. 
  416. The bitnumbers have the same meaning as described above.
  417.  
  418. ü
  419. 31 xbtimerÇ
  420.  
  421. Example: move.l vector,-(sp)
  422.          move.w fata,-(sp)
  423.          move.w control,-(sp)
  424.          move.w timer,-(sp)
  425.          move.w #31,-(sp)
  426.          trap #14
  427.          add.l #12,sp
  428.  
  429. With  this  function one can start an MFP Timer,  and  specify  an 
  430. Interrupt routine for it.
  431. 'timer' is the number of the timer in the MFP:
  432.          0        Timer A
  433.          1        Timer B
  434.          2        Timer C
  435.          3        Timer D
  436. 'data'  and  'control' are the values that will be  given  to  the 
  437. specified timer's data-and control-registers.  Have a look at  any 
  438. MFP 68901 hardware description concerning that.
  439. 'vector'  is the address of the interrupt routine that belongs  to 
  440. the specified timer.
  441. The four timers of the MFP are partly used by the system already:
  442.          A        Reserved for the user
  443.          B        Horizontal Blank Counter
  444.          C        200 Hz system Timer
  445.          D        RS232 Baudrate-generator
  446.                   (the vector belonging hereto is free)
  447.  
  448. ü32 dosoundÇ
  449.  
  450. Example: move.l pointer,-(sp)
  451.          move.w #32,-(sp)
  452.          trap #14
  453.          addq.l #6,sp
  454.  
  455. This function enables the user to comfortable use sounds.
  456. 'pointer'  has  to  point to a  string  of  sound-commands.  These 
  457. commands may be used.
  458.  
  459. Commands $00-$0F
  460. These commands are interpreted as register numbers,  always to  be 
  461. followed  by  a  byte that will be  loaded  in  the  corresponding 
  462. register.
  463. Command $80
  464. This  command is followed by an argument that will be loaded in  a 
  465. temporary register.
  466.  
  467. Command $81
  468. This  command must be followed by three arguments.  The first  one 
  469. must be the soundchip register number in which the contents of the 
  470. temporary  will be copied.  The second argument is a  values  that 
  471. complements that value. The command reaches its end when the third 
  472. byte (the end criterium) is equal to the contents of the temporary 
  473. register.
  474.  
  475. Commands $82-$FF
  476. These  commands  are always to be followed by one  more  argument. 
  477. When that argument equals zero,  sound processing will be cut off. 
  478. When it isn't it specifies the number of timerticks  (20ms,  50Hz) 
  479. that pass until the next sound processing occurs.
  480.  
  481. ü
  482.  
  483.  
  484.  
  485. 33 setprtÇ
  486.  
  487. Example: move.w config,-(sp)
  488.          move.w #33,-(sp)
  489.          trap #14
  490.          addq.l #4,sp
  491.  
  492. This  function  makes it possible to change or  read  the  printer 
  493. configuration.  When  'config' is -1,  the configuration is  read, 
  494. otherwise  'config'  is installed as  printer  configuration.
  495.  
  496. The individual bits in 'config' have the following meaning:
  497.  
  498.          0        Matrixprinter (0) or Daisywheel printer (1)
  499.          1        Color Printer (0) or Monochrome printer (1)
  500.          2        ATARI printer (0) or Epson printer (1)
  501.          3        Test mode (0) or Quality mode (1)
  502.          4        Centronics port (0) or RS232 port (1)
  503.          5        Tractorfeed (0) or Single sheet (1)
  504.          6-14     Reserved
  505.         15        Always 0
  506.  
  507. ü34 kbdvbaseÇ
  508.  
  509. Example: move.w #34,-(sp)
  510.          trap #14
  511.          addq.l #2,sp
  512.  
  513. This  function  returns  the pointer to a table  of  vectors  that 
  514. contains  the  addresses  to  certain  routines  that  handle  the 
  515. keyboard processor. It is built up like this:
  516.  
  517.          long     midivec    MIDI input
  518.          long     vkbderr    Keyboard error
  519.          long     vmiderr    MIDI error
  520.          long     statvec    IKBD status
  521.          long     mousevec   Mouse-routines
  522.          long     clockvec   Time routines
  523.          long     joyvec     Joystick  routines (have a  look  at 
  524.                                this issue's "Question & Answers
  525.                                for more information about this)
  526. 'midivec' points to a routine that writes MIDI data from the MIDI-
  527. IN (from D0) to the MIDI buffer.
  528.  
  529. 'vkbderr'  and  'vmiderr'  are  called  whenever  an  overflow  is 
  530. detected from Keyboard-or MIDI-ACIAs.
  531. The other vectors handle packets that come from  mouse,  joystick, 
  532. etc.  If you write routines for this, you must watch out that they 
  533. end  with an RTS and that they don't take more than 1  millisecond 
  534. the perform.
  535. The  vectortable is located at $A0E and has the following  vectors 
  536. in it:
  537.          midivec  $79C6
  538.          vkbderr  $759C
  539.          vmiderr  $759C
  540.          statvec  $7034
  541.          mousevec $15296
  542.          clockvec $6A46
  543.          joyvec   $7034
  544.  
  545. ü
  546.  
  547.  
  548.  
  549.  
  550.  
  551. 35 kbrate
  552. Ç
  553. Example: move.w repeat,-(sp)
  554.          move.w wait,-(sp)
  555.          move.w #35,-(sp)
  556.          trap #14
  557.          addq.l #6,sp
  558.  
  559. This function enables manipulation of the keyboard-repeat.
  560. 'wait'   specifies  the  time  that  passes  before  the  key   is 
  561. automatically  repeated.  The time is based upon the 50 Hz  system 
  562. tact.
  563. 'repeat' specifies the time that passes for each repeat.
  564. These  two  values  can be changed from  the  Control  Panel  desk 
  565. accesory.
  566. When one of the parameters is set to -1,  the corresponding  value 
  567. is not changed. That way, this function will give the value at the 
  568. current  moment in one word:  bit 0-7 contain the 'repeat'  value, 
  569. whereas bits 8-15 contain the 'wait' value.
  570.  
  571. ü
  572.  
  573. 36 prtblkÇ
  574.  
  575. Example: move.l parameter,-(sp)
  576.          move.w #36,-(sp)
  577.          trap #14
  578.          addq.l #6,sp
  579.  
  580. This function looks very much liek XBIOS function 20 (scrdmp), but 
  581. this  one expects a parameterlist.  'parameter' is the address  of 
  582. that parameterlist, that is built up like this:
  583.          long     blkprt    Address of screen-RAM
  584.          int      offset
  585.          int      width     Screen width
  586.          int      height    Screen height
  587.          int      left
  588.          int      right
  589.          int      scrres    Screen resolution (1,2 or 3)
  590.          int      dstres    Printer resolution (1 or 2)
  591.          long     colpal    Address of the color palette
  592.          int      type      Printer type (0-3)
  593.          int      port      Printer Port (0=Centronics,1=RS232)
  594.          long     masks     Pointer to half-tone mask
  595. ü37 wvblÇ
  596.  
  597. Example: move.w #36,-(sp)
  598.          trap #14
  599.          addq.l #2,sp
  600.  
  601. This function can be used to synchronize graphics with wvbl   of 
  602. the screen. It just waits until wvbl has occured.
  603.  
  604. ü38 supexecÇ
  605.  
  606. Example: move.l address,-(sp)
  607.          move.w #38,-(sp)
  608.          trap #14
  609.          addq.l #6,sp
  610.  
  611. This  function may be used to execute the routine at 'address'  in 
  612. Supervisor Mode of the 68000.
  613.  
  614. ü
  615.  
  616.  
  617. 39 puntaesÇ
  618.  
  619. Example: move.w #39,-(sp)
  620.          trap #14
  621.          addq.l #2,sp
  622.  
  623. This function turns of AES, as long as it's not in ROM.
  624.  
  625. That was it for today, folks. I've told you all I know about XBIOS 
  626. functions.  I  hope you will write to us if you  have  experienced 
  627. specific things with XBIOS functions,  or if you have  succesfully 
  628. used  some  rare  XBIOS functions in GfA  Basic  using  the  XBIOS 
  629. command.  Our address: üST NEWSÇ, Kievitstraat 50, 5702 LE, Helmond, 
  630. The Netherlands.
  631.  
  632.  
  633.