Browse Source

* implemented several i8086 procs, some are stubs/not yet implemented

git-svn-id: branches/i8086@23862 -
nickysn 12 years ago
parent
commit
d2cd13a5c9
1 changed files with 72 additions and 0 deletions
  1. 72 0
      rtl/i8086/i8086.inc

+ 72 - 0
rtl/i8086/i8086.inc

@@ -17,3 +17,75 @@
 procedure fpc_cpuinit;
 procedure fpc_cpuinit;
   begin
   begin
   end;
   end;
+
+{$define FPC_SYSTEM_HAS_SPTR}
+Function Sptr : Pointer;assembler;nostackframe;
+asm
+  mov ax, sp
+end;
+
+{$define FPC_SYSTEM_HAS_GET_CALLER_ADDR}
+function get_caller_addr(framebp:pointer;addr:pointer=nil):pointer;nostackframe;assembler;
+asm
+  or ax, ax
+  jz @@Lg_a_null
+  xchg ax, bx
+  mov bx, [bx+2]
+  xchg ax, bx
+@@Lg_a_null:
+end;
+
+{$define FPC_SYSTEM_HAS_GET_CALLER_FRAME}
+function get_caller_frame(framebp:pointer;addr:pointer=nil):pointer;nostackframe;assembler;
+asm
+  or ax, ax
+  jz @@Lgnf_null
+  xchg ax, bx
+  mov bx, [bx]
+  xchg ax, bx
+@@Lgnf_null:
+end;
+
+{TODO: fix, use smallint?}
+function InterLockedDecrement (var Target: longint) : longint; assembler;
+asm
+  push bx
+  mov bx, ax
+  sub word [bx], 1
+  sbb word [bx+2], 0
+  mov ax, [bx]
+  mov dx, [bx+2]
+  pop bx
+end;
+
+{TODO: fix, use smallint?}
+function InterLockedIncrement (var Target: longint) : longint; assembler;
+asm
+  push bx
+  mov bx, ax
+  add word [bx], 1
+  adc word [bx+2], 0
+  mov ax, [bx]
+  mov dx, [bx+2]
+  pop bx
+end;
+
+{TODO: fix, use smallint?}
+function InterLockedExchange (var Target: longint;Source : longint) : longint;
+begin
+  InterLockedExchange := Target;
+  Target := Source;
+end;
+
+{TODO: implement}
+function InterLockedExchangeAdd (var Target: longint;Source : longint) : longint;
+begin
+  runerror(304);
+end;
+
+{TODO: implement}
+function InterlockedCompareExchange(var Target: longint; NewValue: longint; Comperand: longint): longint;
+begin
+  runerror(304);
+end;
+