home *** CD-ROM | disk | FTP | other *** search
- {
- Well Percy (or is it Kerry?), I see that the regular crowd here have
- shown you how bit-level thingys work. So, I'll give you a working
- example, including a Procedure to display the binary notation of any
- Integer, so you can play With the inFormation they've given you. The
- following Program reads & displays info from the equipment list Word
- (Note: I've made [lazy] use of global Variables, do not emulate)...
- }
- (*******************************************************************)
- Program BitsNBytes; { ...or Digital Road Kill }
- Uses
- Dos; { import Intr() and Registers }
- Var
- NumberFDD, { number of floppy drives }
- InitVMode, { intial video mode }
- COMcount, { number of serial ports }
- LPTcount : Byte; { number of Printer ports }
- Is8087, { math copro installed? }
- IsMouse, { pointing device installed? }
- IsDMA, { DMA support installed? }
- IsGame, { game port installed? }
- IsModem : Boolean; { internal modem installed? }
- EqWord : Word; { the equipment list Word }
- Reg : Registers; { to access CPU Registers }
- {-------------------------------------------------------------------}
- Function BitSet(AnyWord : Word; BitNum : Byte) : Boolean;
- { return True if bit BitNum of AnyWord is 1, else False if it's 0 }
- begin
- BitSet := (BitNum in [0..15]) and ODD(AnyWord SHR BitNum);
- end {BitSet};
- {-------------------------------------------------------------------}
- Procedure WriteBitWord( AnyWord : Word ); { show Word as binary }
- Var
- BinString : String[16]; { represent binary bits }
- MaxBit, { max number of bits }
- BitNum : Byte; { bits 0..15 }
- begin
- BinString := '0000000000000000'; { default to 0 }
- MaxBit := Length(BinString); { total bit count (16) }
- For BitNum := 0 to PRED(MaxBit) do { process bits (0..15) }
- if BitSet(AnyWord, BitNum) then
- INC(BinString[MaxBit - BitNum]);
- Write( BinString ); { Write the binary Form }
- end {WriteBitWord};
- {-------------------------------------------------------------------}
- Procedure ProcessEquipList; { parse equipment list Word EqWord }
- Var
- BitNum : Byte; { to check each bit }
- EBitSet : Boolean; { True if a BitNum is 1, else False }
- begin
- For BitNum := 0 to 15 do
- begin { EqWord has 16 bits }
- EBitSet := BitSet(EqWord,BitNum); { is this bit set? }
- Case BitNum of { each bit has meaning }
- 0 : if EBitSet then { if EqWord.0 is set }
- NumberFDD := (EqWord SHR 6) and $3 + 1
- else
- NumberFDD := 0;
- 1 : Is8087 := EBitSet; { if math co-pro found }
- 2 : IsMouse := EBitSet; { if pointing device }
- 3 : ; {reserved, do nothing}
- 4 : InitVMode := (EqWord SHR BitNum) and $3;
- 5..7 : ; {ignore}
- 8 : IsDMA := EBitSet;
- 9 : COMcount := (EqWord SHR BitNum) and $7;
- 10,11 : ; {ignore}
- 12 : IsGame := EBitSet;
- 13 : IsModem := EBitSet;
- 14 : LPTcount := (EqWord SHR BitNum) and $7;
- 15 : ; {ignore}
- end; {Case BitNum}
- end; {For BitNum}
- end {ProcessEquipList};
- {-------------------------------------------------------------------}
- Function Maybe(Truth : Boolean) : String;
- begin
- if not Truth then
- Maybe := ' not '
- else
- Maybe := ' IS ';
- end {Maybe};
- {-------------------------------------------------------------------}
- begin
- Intr( $11, Reg );
- EqWord := Reg.AX;
- WriteLn;
- Write('Equipment list Word: ',EqWord,' decimal = ');
- WriteBitWord( EqWord );
- WriteLn(' binary');
- WriteLn;
- ProcessEquipList;
- WriteLn('Number of floppies installed: ', NumberFDD );
- WriteLn('Math-coprocessor',Maybe(Is8087),'installed' );
- WriteLn('PS/2 Mouse',Maybe(IsMouse),'installed' );
- Write('Initial video mode: ',InitVMode,' (' );
- Case InitVMode of
- 0 : WriteLn('EGA, VGA, PGA)');
- 1 : WriteLn('40x25 colour)');
- 2 : WriteLn('80x25 colour)');
- 3 : WriteLn('80x25 monochrome)');
- end;
- WriteLn('DMA support',Maybe(IsDMA),'installed' );
- WriteLn('Number of COMs installed: ',COMcount );
- WriteLn('Game port',Maybe(IsGame),'installed' );
- WriteLn('IBM Luggable modem',Maybe(IsModem),'installed');
- WriteLn('Number of Printer ports: ',LPTcount );
- end {BitsNBytes}.
- (*******************************************************************)
-