From 1cf84431d86a72e874dbbb4deedac4db2d3580e7 Mon Sep 17 00:00:00 2001 From: florian Date: Wed, 3 Feb 1999 09:56:17 +0000 Subject: [PATCH] + added simple support for monochrome video cards (not cursors yet), thanks to Jeff Patterson --- rtl/go32v2/crt.pp | 64 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/rtl/go32v2/crt.pp b/rtl/go32v2/crt.pp index 3f6a43092c..ff6a45df51 100644 --- a/rtl/go32v2/crt.pp +++ b/rtl/go32v2/crt.pp @@ -1,3 +1,4 @@ +{$DEFINE SUPMONO} { SUPMONO highlights the support of Monochrome } { $Id$ This file is part of the Free Pascal run time library. @@ -104,6 +105,9 @@ var DelayCnt, { don't modify this var name, as it is hard coded } ScreenWidth, ScreenHeight : longint; +{$IFDEF SUPMONO} + VidSeg : Word; +{$ENDIF} { @@ -128,6 +132,9 @@ end; function GetScreenHeight : longint; begin getscreenheight:=mem[$40:$84]+1; +{$IFDEF SUPMONO} + If mem[$40:$84]=0 then getscreenheight := 25; +{$ENDIF} end; @@ -327,11 +334,19 @@ var begin fil:=32 or (textattr shl 8); if FullWin then +{$IFDEF SUPMONO} + DosmemFillWord(VidSeg,0,ScreenHeight*ScreenWidth,fil) +{$ELSE} DosmemFillWord($b800,0,ScreenHeight*ScreenWidth,fil) +{$ENDIF} else begin for y:=WinMinY to WinMaxY do +{$IFDEF SUPMONO} + DosmemFillWord(VidSeg,((y-1)*ScreenWidth+(WinMinX-1))*2,WinMaxX-WinMinX+1,fil); +{$ELSE} DosmemFillWord($b800,((y-1)*ScreenWidth+(WinMinX-1))*2,WinMaxX-WinMinX+1,fil); +{$ENDIF} end; Gotoxy(1,1); end; @@ -348,7 +363,11 @@ Begin GetScreenCursor(x,y); fil:=32 or (textattr shl 8); if x=y) do begin +{$IFDEF SUPMONO} + dosmemmove(VidSeg,(((WinMinY+my-1)-1)*ScreenWidth+(WinMinX-1))*2, + VidSeg,(((WinMinY+my)-1)*ScreenWidth+(WinMinX-1))*2,(WinMaxX-WinMinX+1)*2); +{$ELSE} dosmemmove($b800,(((WinMinY+my-1)-1)*ScreenWidth+(WinMinX-1))*2, $b800,(((WinMinY+my)-1)*ScreenWidth+(WinMinX-1))*2,(WinMaxX-WinMinX+1)*2); +{$ENDIF} dec(my); end; +{$IFDEF SUPMONO} + dosmemfillword(VidSeg,(((WinMinY+y-1)-1)*ScreenWidth+(WinMinX-1))*2,(WinMaxX-WinMinX+1),fil); +{$ELSE} dosmemfillword($b800,(((WinMinY+y-1)-1)*ScreenWidth+(WinMinX-1))*2,(WinMaxX-WinMinX+1),fil); +{$ENDIF} end; @@ -574,6 +611,10 @@ var begin regs.realeax:=$0100; regs.realecx:=$90A; +{$IFDEF SUPMONO} + If VidSeg=$b800 then regs.realecx:=$90A + else regs.realecx:=$b0d; +{$ENDIF} realintr($10,regs); end; @@ -623,7 +664,11 @@ begin end; else begin +{$IFDEF SUPMONO} + memw[VidSeg:((CurrY-1)*ScreenWidth+(CurrX-1))*2]:=(textattr shl 8) or byte(c); +{$ELSE} memw[$b800:((CurrY-1)*ScreenWidth+(CurrX-1))*2]:=(textattr shl 8) or byte(c); +{$ENDIF} inc(CurrX); end; end; @@ -784,11 +829,20 @@ begin { Load startup values } ScreenWidth:=GetScreenWidth; ScreenHeight:=GetScreenHeight; +{$IFDEF SUPMONO} + If ScreenHeight=0 then ScreenHeight:=24; { bug in my NEC BIOS } +{$ENDIF} WindMax:=(ScreenWidth-1) or ((ScreenHeight-1) shl 8); { Load TextAttr } GetScreenCursor(x,y); + lastmode := mem[$40:$49]; +{$IFDEF SUPMONO} + If not(lastmode=Mono) then VidSeg := $b800 + else VidSeg := $b000; + TextAttr:=mem[VidSeg:((y-1)*ScreenWidth+(x-1))*2+1]; +{$ELSE} TextAttr:=mem[$b800:((y-1)*ScreenWidth+(x-1))*2+1]; - lastmode:=mem[$40:$49]; +{$ENDIF} { Redirect the standard output } assigncrt(Output); Rewrite(Output); @@ -802,7 +856,13 @@ end. { $Log$ - Revision 1.2 1999-01-22 11:12:09 florian + Revision 1.3 1999-02-03 09:56:17 florian + + added simple support for monochrome video cards (not cursors yet), + thanks to Jeff Patterson + + Tue 02-02-99 08:36 am jeff + + added simple support for monochrome video cards (not cursors yet) + Revision 1.2 1999/01/22 11:12:09 florian + support of font8x8 added Revision 1.1 1998/12/21 13:07:02 peter