home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / microcrn / issue_40.arc / PPI.PAS < prev    next >
Pascal/Delphi Source File  |  1988-01-11  |  2KB  |  68 lines

  1. { code from `Inside The PC's PPI' in Micro Cornucopia Issue #40 }
  2.  
  3. { Figure 4 - Keyboard Disable/Enable Function }
  4.  
  5. PROCEDURE KeyboardOff (KbdOff: Boolean);
  6.  
  7. CONST
  8.   PPIb = $61;            { PPI Port B address }
  9.  
  10. BEGIN
  11.   IF KbdOff
  12.     THEN     { turn off PB6 to kill Kbd clock }
  13.       Port [PPIb] := Port [PPIb] AND $bf
  14.     ELSE    { turn on PB6 to enable Kbd clock }
  15.       Port [PPIb] := Port [PPIb] OR $40;
  16. END;  { KeyboardOff }
  17.  
  18.  
  19.  
  20. { Figure 5 - Check Installed Equipment }
  21.  
  22. TYPE  { standard register declaration }
  23.   RegRecord = RECORD CASE Integer OF
  24.                 1:(AX,BX,CX,DX,BP,SI,
  25.                    DI,DS,ES,Flags:Integer);
  26.                 2:(AL,AH,BL,BH,CL,CH,DL,DH:Byte);
  27.               END;
  28.  
  29. PROCEDURE CheckEquip;
  30.  { uses int 11h to detemine equipment installed }
  31.  
  32. VAR
  33.   Regs: RegRecord;
  34.   Temp: Integer;  { makes things easier to read }
  35.  
  36. BEGIN
  37.   Intr ($11, Regs);  { do equip check interrupt }
  38.   WITH Regs DO          { result returned in AX }
  39.     BEGIN
  40.       Temp := AX AND 1;      { any disk drives? }
  41.       IF (Temp = 1)
  42.         THEN Writeln ('Got some drives')
  43.         ELSE Writeln ('No drives');
  44.       { bit 1 not used }
  45.       Temp := (AX AND $0c) SHR 2;  {how much RAM}
  46.       Writeln (Temp+1, ' block(s) RAM');{old PCs}
  47.       Temp := (AX AND $30) SHR 4;       { video }
  48.       CASE Temp OF
  49.         0: Writeln ('EGA');
  50.         1: Writeln ('40 column CGA');
  51.         2: Writeln ('80 column CGA');
  52.         3: Writeln ('80 column mono');
  53.       END;
  54.       Temp := (AX AND $c0) SHR 6; { # of drives }
  55.       Writeln (Temp + 1, ' drive(s)');
  56.       { bit8 senses DMA controller on PCjr only }
  57.       Temp:=(AX AND $0e00) SHR 9;{# serial ports}
  58.       Writeln (Temp, ' RS232 port(s)');
  59.       Temp := (AX AND $1000) SHR 12; {game port?}
  60.       IF (Temp = 0)
  61.         THEN Writeln ('Game port')
  62.         ELSE Writeln ('No game port');
  63.       { bit13 senses serial printer on PCjr only}
  64.       Temp := (AX AND $c000) SHR 14; {# printers}
  65.       Writeln (Temp, ' printer(s)');
  66.     END;  { WITH Regs }
  67. END;  { CheckEquip }
  68.