Browse Source

* reimplemented do_write and do_isdevice in Pascal, using the MsDos procedure

git-svn-id: branches/i8086@24042 -
nickysn 12 years ago
parent
commit
7b578f3e9c
2 changed files with 16 additions and 22 deletions
  1. 14 20
      rtl/msdos/sysfile.inc
  2. 2 2
      rtl/msdos/system.pp

+ 14 - 20
rtl/msdos/sysfile.inc

@@ -33,15 +33,16 @@ end;
 
 
 function do_write(h:thandle;addr:pointer;len : longint) : longint;
+var
+  regs: Registers;
 begin
+  regs.AH := $40;
+  regs.BX := h;
+  regs.CX := len;
+  regs.DS := DSeg;
+  regs.DX := Word(addr);
+  MsDos(regs);
   { TODO: add error checking }
-  asm
-    mov ah, 40h
-    mov bx, h
-    mov cx, len
-    mov dx, addr
-    int 21h
-  end ['ax','bx','cx','dx'];
   do_write := len;
 end;
 
@@ -83,19 +84,12 @@ end;
 
 
 function do_isdevice(handle:THandle):boolean;
-label
-  no_device;
+var
+  regs: Registers;
 begin
+  regs.AX := $4400;
+  regs.BX := handle;
+  MsDos(regs);
   { TODO: add error checking }
-  asm
-    mov ax, 4400h
-    mov bx, handle
-    int 21h
-    xor al, al
-    test dl, 80h
-    jz no_device
-    inc al
-no_device:
-    mov do_isdevice, al
-  end ['ax','bx','dx'];
+  do_isdevice := (regs.DL and $80) <> 0;
 end;

+ 2 - 2
rtl/msdos/system.pp

@@ -63,8 +63,6 @@ procedure DebugWriteLn(const S: string);
 
 implementation
 
-{$I system.inc}
-
 {$I registers.inc}
 
 procedure Intr(IntNo: Byte; var Regs: Registers); external name 'FPC_INTR';
@@ -74,6 +72,8 @@ begin
   Intr($21, Regs);
 end;
 
+{$I system.inc}
+
 procedure DebugWrite(const S: string);
 begin
   asm