home *** CD-ROM | disk | FTP | other *** search
- {
- Check out Hax #179 from PC Techniques vol.4 no.6 Feb/Mar issue (page 70),
- (coincidently written by me), where a small program is presented that'll not
- only detect whether a VGA adapter is installed, but is also capable of putting
- the screen in 80x12, 80x14, 80x21, 80x25, 80x28, 80x43 or 80x50 mode...}
-
- {$IFDEF VER70}
- {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S+,T-,V-,X-}
- {$ELSE}
- {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S+,V-,X-}
- {$ENDIF}
- {$M 1024,0,0}
- {
- VGA 3.0
- Borland Pascal (Objects) 7.01
- Copr. (c) 7-17-1993 DwarFools & Consultancy drs. Robert E. Swart
- P.O. box 799
- 5702 NP Helmond
- The Netherlands
-
- Code size: 3248 Bytes
- Data size: 676 Bytes
- }
- Const
- VGAInside: Boolean = False; { Assume no VGA-card is installed }
-
- var VGALines,i: Integer;
-
- procedure Lines200;
- { Set 200 scanlines on VGA display }
- InLine(
- $B8/$03/$00/ { mov AX,$0003 }
- $CD/$10/ { int $10 }
- $B8/$00/$12/ { mov AX,$1200 }
- $B3/$30/ { mov BL,$30 }
- $CD/$10); { int $10 }
-
- procedure Lines350;
- { Set 350 scanlines on VGA display }
- InLine(
- $B8/$03/$00/ { mov AX,$0003 }
- $CD/$10/ { int $10 }
- $B8/$01/$12/ { mov AX,$1201 }
- $B3/$30/ { mov BL,$30 }
- $CD/$10); { int $10 }
-
- procedure Lines400;
- { Set 400 scanlines on VGA display }
- InLine(
- $B8/$03/$00/ { mov AX,$0003 }
- $CD/$10/ { int $10 }
- $B8/$02/$12/ { mov AX,$1202 }
- $B3/$30/ { mov BL,$30 }
- $CD/$10); { int $10 }
-
- procedure Font8x8;
- { Set 8x8 CGA-font on VGA display. }
- InLine(
- $B8/$03/$00/ { mov AX,$0003 }
- $CD/$10/ { int $10 }
- $B8/$12/$11/ { mov AX,$1112 }
- $B3/$00/ { mov BL,0 }
- $CD/$10); { int $10 }
-
- procedure Font8x14;
- { Set 8x14 EGA-font on VGA display }
- InLine(
- $B8/$03/$00/ { mov AX,$0003 }
- $CD/$10/ { int $10 }
- $B8/$11/$11/ { mov AX,$1111 }
- $B3/$00/ { mov BL,0 }
- $CD/$10); { int $10 }
-
- procedure Font8x16;
- { Set 8x16 VGA-font on VGA display }
- InLine(
- $B8/$03/$00/ { mov AX,$0003 }
- $CD/$10/ { int $10 }
- $B8/$14/$11/ { mov AX,$1114 }
- $B3/$00/ { mov BL,0 }
- $CD/$10); { int $10 }
-
-
- begin
- writeln('VGALines 3.0 (c) 1993 DwarFools & Consultancy' +
- ', by drs. Robert E. Swart.'#13#10);
- ASM { Detect VGA display }
- mov AX,$0F00
- int $10
- cmp AL,$03 { TextMode = CO80 }
- jne @End
- mov AX,$1C00
- mov CX,$0007
- int $10
- cmp AL,$1C
- jne @End
- mov VGAInside,True { VGA display installed }
- @End:
- end { VGA display };
-
- Val(ParamStr(1),VGALines,i);
-
- if not ((ParamCount >= 1) and VGAInside and (i = 0) and
- (VGALines in [12,14,21,25,28,43,50])) then
- begin
- writeln('Usage: VGALines #Lines [test]'#13#10);
- writeln('Where #Lines is any of [12,14,21,25,28,43,50]':52);
- if not VGAInside then
- writeln(#13#10'Error: VGA display required!');
- Halt
- end;
-
- case VGALines of { first set scan-lines }
- 12,14: Lines200;
- 21,43: Lines350;
- else Lines400
- end;
-
- case VGALines of { then select the font }
- 43,50: Font8x8;
- 14,28: Font8x14;
- else Font8x16
- end;
-
- if ParamCount > 1 then { test parameter is used }
- begin
- for i:=0 to VGALines-1 do writeln(i);
- write(VGALines,' lines set.')
- end
- end.