瀏覽代碼

atari: initial support for TOS syscalls

git-svn-id: trunk@34610 -
Károly Balogh 8 年之前
父節點
當前提交
5db02f4202
共有 5 個文件被更改,包括 29 次插入5 次删除
  1. 18 0
      compiler/pdecsub.pas
  2. 1 1
      compiler/ppu.pas
  3. 2 0
      compiler/symconst.pas
  4. 7 4
      compiler/syscinfo.pas
  5. 1 0
      compiler/utils/ppuutils/ppudump.pp

+ 18 - 0
compiler/pdecsub.pas

@@ -2051,6 +2051,7 @@ procedure pd_syscall(pd:tabstractprocdef);
         syscall: psyscallinfo;
       begin
         case target_info.system of
+          system_m68k_atari,
           system_m68k_amiga,
           system_powerpc_amiga:
               include(pd.procoptions,get_default_syscall);
@@ -2122,6 +2123,23 @@ begin
 {$if defined(powerpc) or defined(m68k) or defined(i386) or defined(x86_64)}
   include_po_syscall;
 
+  if target_info.system = system_m68k_atari then
+    begin
+      v:=get_intconst;
+      if ((v<0) or (v>15)) then
+        message(parser_e_range_check_error)
+      else
+        tprocdef(pd).extnumber:=longint(v.svalue);
+
+      v:=get_intconst;
+      if ((v<0) or (v>high(smallint))) then
+        message(parser_e_range_check_error)
+      else
+          tprocdef(pd).import_nr:=longint(v.svalue);
+
+      exit;
+    end;
+
   if consume_sym(sym,symtable) then
     if (sym.typ=staticvarsym) and
        ((tabstractvarsym(sym).vardef.typ=pointerdef) or

+ 1 - 1
compiler/ppu.pas

@@ -43,7 +43,7 @@ type
 {$endif Test_Double_checksum}
 
 const
-  CurrentPPUVersion = 186;
+  CurrentPPUVersion = 187;
 
 { unit flags }
   uf_init                = $000001; { unit has initialization section }

+ 2 - 0
compiler/symconst.pas

@@ -338,6 +338,8 @@ type
     po_has_public_name,
     po_forward,
     po_global,
+    { Generic syscall procoption, for systems like Atari, Palm, etc }
+    po_syscall,
     { The different kind of syscalls on AmigaOS and MorphOS, m68k and PPC }
     po_syscall_legacy,
     po_syscall_sysv,

+ 7 - 4
compiler/syscinfo.pas

@@ -37,7 +37,8 @@ type
   psyscallinfo = ^tsyscallinfo;
 
 const
-  syscall_conventions: array[1..7] of tsyscallinfo = (
+  syscall_conventions: array[1..8] of tsyscallinfo = (
+      ( token: NOTOKEN;    procoption: po_syscall;           validon: [system_m68k_atari] ),
       ( token: _LEGACY;    procoption: po_syscall_legacy;    validon: [system_powerpc_morphos,system_m68k_amiga] ),
       ( token: _SYSV;      procoption: po_syscall_sysv;      validon: [system_powerpc_morphos] ),
       ( token: _SYSVBASE;  procoption: po_syscall_sysvbase;  validon: [system_powerpc_morphos] ),
@@ -58,8 +59,9 @@ uses
   verbose;
 
 const
-  syscall_conventions_po = [ po_syscall_legacy, po_syscall_sysv, po_syscall_sysvbase, po_syscall_basesysv,
-                             po_syscall_r12base, po_syscall_stackbase, po_syscall_eaxbase ];
+  syscall_conventions_po = [ po_syscall, po_syscall_legacy, po_syscall_sysv,
+                             po_syscall_sysvbase, po_syscall_basesysv, po_syscall_r12base,
+                             po_syscall_stackbase, po_syscall_eaxbase ];
 
 type
   tsyscalldefaultinfo = record
@@ -68,7 +70,8 @@ type
   end;
 
 const
-  default_syscall_conventions: array[0..4] of tsyscalldefaultinfo = (
+  default_syscall_conventions: array[0..5] of tsyscalldefaultinfo = (
+      ( system: system_m68k_atari;      procoption: po_syscall ),
       ( system: system_m68k_amiga;      procoption: po_syscall_legacy ),
       ( system: system_powerpc_amiga;   procoption: po_syscall_basesysv ),
       ( system: system_powerpc_morphos; procoption: po_syscall_legacy ),

+ 1 - 0
compiler/utils/ppuutils/ppudump.pp

@@ -1930,6 +1930,7 @@ const
      (mask:po_has_public_name; str:'HasPublicName'),
      (mask:po_forward;         str:'Forward'),
      (mask:po_global;          str:'Global'),
+     (mask:po_syscall;         str:'Syscall'),
      (mask:po_syscall_legacy;  str:'SyscallLegacy'),
      (mask:po_syscall_sysv;    str:'SyscallSysV'),
      (mask:po_syscall_basesysv;str:'SyscallBaseSysV'),