Procházet zdrojové kódy

* Some bug fixes.
* ___SYSCALL changed to uppercase.

daniel před 27 roky
rodič
revize
a21b12c9e4
1 změnil soubory, kde provedl 62 přidání a 51 odebrání
  1. 62 51
      rtl/os2/sysos2.pas

+ 62 - 51
rtl/os2/sysos2.pas

@@ -165,7 +165,7 @@ begin
     asm
         movb $0x4c,%ah
         movb errnum,%al
-        call ___syscall
+        call ___SYSCALL
     end;
 end;
 
@@ -210,7 +210,7 @@ var hl:longint;
 begin
     asm
         movb $0x2c,%ah
-        call ___syscall
+        call ___SYSCALL
         movw %cx,-4(%ebp)
         movw %dx,-2(%ebp)
     end;
@@ -232,8 +232,8 @@ function sbrk(size:longint):longint;
 begin
     asm
         movl size,%edx
-        movl $0x7f00,%ax
-        int  $0x21
+        movw $0x7f00,%ax
+        call ___SYSCALL
         movl %eax,__RESULT
     end;
 end;
@@ -273,7 +273,7 @@ begin
      asm
         movb $0x3e,%ah
         mov h,%ebx
-        call ___syscall
+        call ___SYSCALL
      end;
 end;
 
@@ -284,7 +284,7 @@ begin
     asm
         movl 8(%ebp),%edx
         movb $0x41,%ah
-        call ___syscall
+        call ___SYSCALL
         jnc LERASE1
         movw %ax,U_SYSOS2_INOUTRES;
     LERASE1:
@@ -300,7 +300,7 @@ begin
         movl 8(%ebp),%edx
         movl 12(%ebp),%edi
         movb $0x56,%ah
-        call ___syscall
+        call ___SYSCALL
         jnc LRENAME1
         movw %ax,U_SYSOS2_INOUTRES;
     LRENAME1:
@@ -315,7 +315,7 @@ begin
         movl 12(%ebp),%edx
         movl 8(%ebp),%ebx
         movb $0x3f,%ah
-        call ___syscall
+        call ___SYSCALL
         jnc LDOSREAD1
         movw %ax,U_SYSOS2_INOUTRES;
         xorl %eax,%eax
@@ -333,7 +333,7 @@ begin
         movl 12(%ebp),%edx
         movl 8(%ebp),%ebx
         movb $0x40,%ah
-        call ___syscall
+        call ___SYSCALL
         jnc LDOSWRITE1
         movw %ax,U_SYSOS2_INOUTRES;
     LDOSWRITE1:
@@ -345,11 +345,10 @@ function do_filepos(handle:longint):longint;
 
 begin
     asm
-        movb $0x42,%ah
-        movb $0x1,%al
+        movw $0x4201,%ax
         movl 8(%ebp),%ebx
         xorl %edx,%edx
-        call ___syscall
+        call ___SYSCALL
         jnc LDOSFILEPOS
         movw %ax,U_SYSOS2_INOUTRES;
         xorl %eax,%eax
@@ -363,12 +362,10 @@ procedure do_seek(handle,pos:longint);
 
 begin
     asm
-        movl $0x4200,%eax
+        movw $0x4200,%ax
         movl 8(%ebp),%ebx
         movl 12(%ebp),%edx
-        movl %edx,%ecx
-        shrl $16,%ecx
-        call ___syscall
+        call ___SYSCALL
         jnc .LDOSSEEK1
         movw %ax,U_SYSOS2_INOUTRES;
     .LDOSSEEK1:
@@ -381,20 +378,14 @@ function do_seekend(handle:longint):longint;
 
 begin
     asm
-        movl $0x4202,%eax
+        movw $0x4202,%ax
         movl 8(%ebp),%ebx
-        xorl %ecx,%ecx
         xorl %edx,%edx
-        call ___syscall
+        call ___SYSCALL
         jnc .Lset_at_end1
         movw %ax,U_SYSOS2_INOUTRES;
         xorl %eax,%eax
-        jmp .Lset_at_end2
     .Lset_at_end1:
-        shll $16,%edx
-        movzwl %ax,%eax
-        orl %edx,%eax
-    .Lset_at_end2:
         leave
         ret $4
     end;
@@ -417,16 +408,14 @@ begin
         movl $0x4200,%eax
         movl 8(%ebp),%ebx
         movl 12(%ebp),%edx
-        movl %edx,%ecx
-        shrl $16,%ecx
-        call ___syscall
+        call ___SYSCALL
         jc .LTruncate1
         movl 8(%ebp),%ebx
         movl 12(%ebp),%edx
         movl %ebp,%edx
         xorl %ecx,%ecx
         movb $0x40,%ah
-        call ___syscall
+        call ___SYSCALL
         jnc .LTruncate2
         .LTruncate1:
         movw %ax,U_SYSOS2_INOUTRES;
@@ -446,7 +435,7 @@ procedure do_open(var f;p:pchar;flags:longint);
   when (flags and $1000) there is no check for close (needed for textfiles)
 }
 
-var oflags:longint;
+var oflags:byte;
 
 begin
     allowslash(p);
@@ -465,12 +454,12 @@ begin
        end;
     { reset file handle }
     filerec(f).handle:=high(word);
-    oflags:=$8404;
+    oflags:=2;
     { convert filemode to filerec modes }
     case (flags and 3) of
         0 : begin
             filerec(f).mode:=fminput;
-            oflags:=$8001;
+            oflags:=0;
         end;
         1 : filerec(f).mode:=fmoutput;
         2 : filerec(f).mode:=fminout;
@@ -478,13 +467,13 @@ begin
     if (flags and $100)<>0 then
         begin
             filerec(f).mode:=fmoutput;
-            oflags:=$8302;
+            oflags:=2;
         end
     else
         if (flags and $10)<>0 then
             begin
                 filerec(f).mode:=fmoutput;
-                oflags:=$8404;
+                oflags:=2;
             end;
     { empty name is special }
     if p[0]=#0 then
@@ -498,18 +487,34 @@ begin
             end;
             exit;
         end;
-    asm
-        movl $0xff02,%ax
-        movl -4(%ebp),%ecx
-        movl 12(%ebp),%ebx
-        call ___syscall
-        jnc .LOPEN1
-        movw %ax,U_SYSOS2_INOUTRES;
-        movw $0xffff,%ax
-    .LOPEN1:
-        movl 8(%ebp),%edx
-        movw %ax,(%edx)
-    end;
+    if (flags and $100)<>0 then
+        {Use create function.}
+        asm
+            movb $0x3c,%ah
+            movl p,%edx
+            xorw %cx,%cx
+            call ___SYSCALL
+            jnc LOPEN1
+            movw %ax,U_SYSOS2_INOUTRES;
+            movw $0xffff,%ax
+        LOPEN1:
+            movl f,%edx
+            movw %ax,(%edx)
+        end
+    else
+        {Use open function.}
+        asm
+            movb $0x3d,%ah
+            movb oflags,%al
+            movl p,%edx
+            call ___SYSCALL
+            jnc LOPEN2
+            movw %ax,U_SYSOS2_INOUTRES;
+            movw $0xffff,%ax
+        LOPEN2:
+            movl f,%edx
+            movw %ax,(%edx)
+        end;
     if (flags and $10)<>0 then
         do_seekend(filerec(f).handle);
 end;
@@ -555,7 +560,7 @@ begin
     asm
         leal buffer,%edx
         movb 8(%ebp),%ah
-        call ___syscall
+        call ___SYSCALL
         jnc  .LDOS_DIRS1
         movw %ax,U_SYSOS2_INOUTRES;
     .LDOS_DIRS1:
@@ -600,7 +605,7 @@ begin
         movb drivenr,%dl
         movl sof,%esi
         mov  $0x47,%ah
-        call ___syscall
+        call ___SYSCALL
     end;
     { Now Dir should be filled with directory in ASCIIZ, }
     { starting from dir[4]                               }
@@ -627,7 +632,7 @@ begin
             { because the drive was the default, which can be unknown }
             asm
                 movb $0x19,%ah
-                call ___syscall
+                call ___SYSCALL
                 addb $65,%al
                 movb %al,i
             end;
@@ -661,7 +666,7 @@ begin
     {Determine the operating system we are running on.}
     asm
         movw $0x7f0a,%ax
-        call ___syscall
+        call ___SYSCALL
         test $512,%bx          {Bit 9 is OS/2 flag.}
         setnzb U_SYSOS2_OS_MODE
         test $4096,%bx
@@ -674,7 +679,13 @@ begin
     asm
         mov $0x7f01,%ax
         movl HEAPSIZE,%edx
-        call ___syscall
+        addl __heap_base,%edx
+        call ___SYSCALL
+        cmpl $-1,%eax
+        jnz _heapok
+        pushl $204
+        call _SYSOS2$$_RUNERROR$WORD
+    _heapok:
     end;
 
     {Now request, if we are running under DOS,
@@ -685,7 +696,7 @@ begin
             xor %ebx,%ebx
             mov $0xfff,%ecx
             xor %edx,%edx
-            call ___syscall
+            call ___SYSCALL
             mov %eax,U_SYSOS2_FIRST_MEG
         end
     else