File: rwpage.pp

package info (click to toggle)
svgalib 1%3A1.4.3-24
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 4,768 kB
  • ctags: 9,153
  • sloc: ansic: 59,341; makefile: 1,141; asm: 630; sh: 61; perl: 54; pascal: 49
file content (83 lines) | stat: -rw-r--r-- 2,059 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
PROGRAM ScrollTest;

Uses svgalib;

type
  VideoMemType = array[0..65535] of byte;

var
  i,mode,StartupMode	   : longint;
  SeparateReadWriteWindows : boolean;
  modeinfo		   : ^vga_modeinfo;
  VideoMem		   : ^VideoMemType;
  p : pointer;


Procedure DrawRectangle(x1,y1,x2,y2 : integer);
begin
  vga_drawline(x1,y1,x2,y1);
  vga_drawline(x1,y2,x2,y2);
  vga_drawline(x1,y1,x1,y2);
  vga_drawline(x2,y1,x2,y2);
end;  {DrawRectangle}


Procedure Scroll;
{ copies first bank of screen to the last bank (for 1024x768x256 mode) }
var  i : word;
begin
  vga_setreadpage(0);
  vga_setwritepage(11);
  for i := 65535 downto 0 do VideoMem^[i] := VideoMem^[i];
end;  {Scroll}
(*  
Procedure Scroll;  Assembler;
{ copies first bank of screen to the last bank (for 1024x768x256 mode) }
var  popreturn : longint;
asm
       mov   esi,SegA000
       mov   edi,esi
       mov   eax,0
       push  eax
       call  vga_setreadpage  {set read bank}
       pop   popreturn        {tidy stack}
       mov   eax,11
       push  eax
       call  vga_setwritepage {set write bank}
       pop   popreturn        {tidy stack}
       mov   ecx,16384
       rep   movsd            {copy all of bank 0 to bank 11}
end;  {Scroll}
*)

begin
  mode := 12;  {1024x768x256}
  i := vga_init;
  StartupMode := vga_getcurrentmode;
  vga_setmode(mode);
  gl_setcontextvga(mode);
  p := vga_getgraphmem; 
  VideoMem := p;
  modeinfo := vga_getmodeinfo(mode);
  SeparateReadWriteWindows := (modeinfo^.flags and HAVE_RWPAGE <> 0);
  if SeparateReadWriteWindows <> False then begin
     vga_setcolor(14);
     gl_fillbox(100,0,823,63,13);

     DrawRectangle(100,0,923,63);
     vga_setcolor(3);
     vga_drawline(0,0,1023,767);
     vga_drawline(1023,0,0,767);
     for i := 0 to 5000000 do vga_drawpixel(10,10);  {delay}

     Scroll;  {copy first 64 lines down to last 64 lines of screen}

     for i := 0 to 5000000 do vga_drawpixel(10,10);  {delay}

  end;
   
  vga_setmode(StartupMode);

  writeln('SeparateReadWriteWindows = ',SeparateReadWriteWindows);
  writeln('vgamode = ',mode);
end.