home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / modula2 / def / gemlib / bios.def < prev    next >
Encoding:
Modula Definition  |  1994-09-22  |  5.6 KB  |  186 lines

  1. DEFINITION MODULE BIOS; 
  2.  
  3. (* -------------------------------------------------------------------
  4.  
  5.  
  6.             BIOS - Modula interface to BIOS functions
  7.  
  8.  
  9.    -------------------------------------------------------------------   *)
  10.  
  11.  
  12.  
  13. FROM SYSTEM IMPORT ADDRESS;
  14.  
  15.  
  16. TYPE
  17.   MDPtr = POINTER TO MD;
  18.  
  19. TYPE
  20.   MPB = RECORD  (* memory parameter block *)
  21.           mpmfl: MDPtr;  (* memory free list *)
  22.           mpmal: MDPtr;  (* memory allocated list *)
  23.           morover: MDPtr;  (* roving pointer *)
  24.         END;
  25.  
  26. TYPE
  27.   MD = RECORD  (* memory descriptor *)
  28.          mlink: MDPtr;  (* next MD or NULL, Address(0) *)
  29.          mstart: ADDRESS; (* start address of block *)
  30.          mlength: LONGCARD;  (* nr. bytes in block *)
  31.          mown: ADDRESS;  (* owners process descriptor *)
  32.        END;
  33.  
  34. TYPE Device = (PRT,  (* printer, parallel port *)
  35.                AUX,  (* aux device, the serial port *)
  36.                CON,  (* console, the screen *)
  37.                MSS,  (* high speed serial, MIDI port: Atari extension *)
  38.                KDB); (* intelligent keyboard: Atari extension *)
  39.  
  40. TYPE RW = (Read,                (* normal read *)
  41.            Write,               (* normal write *)
  42.            ReadNoMediaChange,   (* read, do not alter media-change *)
  43.            WriteNoMediaChange); (* write, do not alter media-change *)
  44.  
  45. TYPE MCState = (NoChange,        (* definately no change *)
  46.                 MayHaveChanged,  (* media might have changed *)
  47.                 Changed);        (* definately has changed *)
  48.  
  49. TYPE BPBPtr = POINTER TO BPB ;
  50.      BPB = RECORD (* BIOS Parameter Block *)
  51.              recsiz : CARDINAL ; (* physical sector size in bytes *)
  52.              clsiz  : CARDINAL ; (* cluster size in sectors *)
  53.              clsizb : CARDINAL ; (* cluster size in bytes *)
  54.              rdlen  : CARDINAL ; (* root directory length in sectors *)
  55.              fsiz   : CARDINAL ; (* FAT size in sectors *)
  56.              fatrec : CARDINAL ; (* sector # of ist data sector of 2nd
  57.                                                                 FAT *)
  58.              datrec : CARDINAL ; (* sector # of ist data sector *)
  59.              numc1  : CARDINAL ; (* number of data clusters on disk *)
  60.              bflags : CARDINAL ; (* misc flags *)
  61.            END ;
  62.  
  63. TYPE
  64.   DriveSet = SET OF [0..15]; (* M.B. org. 0..31 *)
  65.  
  66. TYPE
  67.   KBShiftBits = (RightShift, LeftShift, ControlKey, AlternateKey,
  68.                  CapsLock, RightMouseButton, LeftMMouseButton);
  69.   KBShifts = SET OF KBShiftBits;
  70.  
  71.  
  72. PROCEDURE GetMPB(VAR mob: MPB);
  73.   (* get initial memory parameter block.
  74.  
  75.      mpb: returned with all fields filled. *)
  76.  
  77.  
  78. PROCEDURE BConStat(dev: Device): BOOLEAN;
  79.   (* return input status of device.
  80.  
  81.      dev: the device to return status of.
  82.      returns: TRUE => characters waiting to be read. *)
  83.  
  84.  
  85. PROCEDURE BCosStat(dev: Device): BOOLEAN;
  86.   (* return output status of device.
  87.  
  88.      dev: the device to return status of.
  89.      returns: TRUE => no characters waiting to be written. *)
  90.  
  91.  
  92. PROCEDURE BConIn(dev: Device): LONGCARD;
  93.   (* read character from device. (waits for character)
  94.  
  95.      dev: the device to read from.
  96.      returns: character. For CON, IBM-PC compatible scan code in
  97.        hi word, character in low word. *)
  98.  
  99.  
  100. PROCEDURE BConOut(dev: Device; c: CHAR);
  101.   (* write character to device. (waits for device ready)
  102.  
  103.      dev: the device to write to.
  104.      c: the character to write. *)
  105.  
  106.  
  107. PROCEDURE RWAbs(rw: RW; buf: ADDRESS; count, recno, dev: CARDINAL):
  108.                                                            LONGINT;
  109.   (* read/write absolute sectors.
  110.  
  111.      rw: the type of read/write operation.
  112.      buf: the buffer to write from/read to.
  113.      count: number of sectors to transfer.
  114.      recno: logical sector number to start transfer at,
  115.      dev: device, 0 => A:, 1 => B:, > 2 for hard disk, network, etc.
  116.  
  117.      returns: 0 => OK, otherwise error code. *)
  118.  
  119.  
  120. PROCEDURE SetException(vecnum: CARDINAL; vec: PROC);
  121.   (* set exception vector.
  122.  
  123.      vecnum: vector to set.
  124.      vec: the code to execute on exception.
  125.  
  126.      returns: old vector.
  127.  
  128.      notes: S00-SFF: reserved for 60000
  129.             S100-S1FF: reserved for GEMDOS.
  130.                        S100 = system timer interrupt,
  131.                        S101 = critical error handler.
  132.                               S102 = Process terminate hook.
  133.                        S200-SFFFF: reserved for DEM use. *)
  134.  
  135.  
  136. PROCEDURE GetException(vecnum: CARDINAL): ADDRESS;
  137.   (* get exception vector.
  138.  
  139.      vecnum: as for SetException.
  140.      returns: current exception handler address. *)
  141.  
  142.  
  143. PROCEDURE TimerCalibration(): LONGCARD;
  144.   (* get timer calibration value.
  145.  
  146.      returns: timer calibration value to nearest millisecond. *)
  147.  
  148.  
  149. PROCEDURE GetBPB(dev: CARDINAL): BPBPtr ;
  150.   (* get bios parameter block for device.
  151.  
  152.      dev: device to get BPB for; 0 => A:, 1 => B: etc.
  153.  
  154.      returns: 0 => BPB can't be determined, otherwise address of
  155.                 parameter block. *)
  156.  
  157.  
  158. PROCEDURE MediaChange(dev: CARDINAL): MCState;
  159.   (* returns media change state for a device.
  160.  
  161.      dev: the device to return change state of, 0 => A:, etc.
  162.  
  163.      returns: the media change state. *)
  164.  
  165.  
  166. PROCEDURE DriveMap(): DriveSet;
  167.   (* return drives on line.
  168.  
  169.      returns: 1 in bit position means drive on line, otherwise
  170.                 no drive connected. *)
  171.  
  172.  
  173. PROCEDURE SetKBShift(keys: KBShifts);
  174.   (* set keyboard shift key state.
  175.  
  176.      keys: the new keyboard shift key state. *)
  177.  
  178.  
  179. PROCEDURE GetKBShift(): KBShifts;
  180.   (* return keyboard shift key state.
  181.  
  182.      returns: the current keyboard shift key state. *)
  183.  
  184.  
  185. END BIOS.
  186.