2
0
Эх сурвалжийг харах

+ added function get_dpmi_version to unit go32

git-svn-id: trunk@25784 -
nickysn 11 жил өмнө
parent
commit
1b36781dd8
1 өөрчлөгдсөн 36 нэмэгдсэн , 0 устгасан
  1. 36 0
      rtl/go32v2/go32.pp

+ 36 - 0
rtl/go32v2/go32.pp

@@ -76,6 +76,13 @@ interface
 
 
       registers = trealregs;
       registers = trealregs;
 
 
+      tdpmiversioninfo = record
+        major, minor: byte;
+	flags: word;
+	cpu: byte;
+	master_pic, slave_pic: byte;
+      end;
+
     { this works only with real DPMI }
     { this works only with real DPMI }
     function allocate_ldt_descriptors(count : word) : word;
     function allocate_ldt_descriptors(count : word) : word;
     function free_ldt_descriptor(d : word) : boolean;
     function free_ldt_descriptor(d : word) : boolean;
@@ -92,6 +99,7 @@ interface
     function get_page_size:longint;
     function get_page_size:longint;
     function map_device_in_memory_block(handle,offset,pagecount,device:longint):boolean;
     function map_device_in_memory_block(handle,offset,pagecount,device:longint):boolean;
     function realintr(intnr : word;var regs : trealregs) : boolean;
     function realintr(intnr : word;var regs : trealregs) : boolean;
+    function get_dpmi_version(var version: tdpmiversioninfo): boolean;
 
 
     { is needed for functions which need a real mode buffer }
     { is needed for functions which need a real mode buffer }
     function global_dos_alloc(bytes : longint) : longint;
     function global_dos_alloc(bytes : longint) : longint;
@@ -1135,6 +1143,34 @@ interface
          end;
          end;
       end;
       end;
 
 
+    function get_dpmi_version(var version: tdpmiversioninfo): boolean;
+      var
+        _version, _flags, _cpu, _pic: word;
+      begin
+         asm
+           movl $0x0400,%eax
+           int $0x31
+           pushf
+	   movw %ax,_version
+	   movw %bx,_flags
+	   movw %cx,_cpu
+	   movw %dx,_pic
+           call test_int31
+           movb %al,__RESULT
+	 end ['EAX','EBX','ECX','EDX'];
+
+	 if get_dpmi_version then
+	 begin
+	   FillChar(version, SizeOf(version), 0);
+	   version.major := _version shr 8;
+	   version.minor := _version and $ff;
+	   version.flags := _flags;
+	   version.cpu := _cpu and $ff;
+	   version.master_pic := _pic shr 8;
+	   version.slave_pic := _pic and $ff;
+	 end;
+      end;
+
 {*****************************************************************************
 {*****************************************************************************
                               Transfer Buffer
                               Transfer Buffer
 *****************************************************************************}
 *****************************************************************************}