Ver Fonte

m68k: basic DOS syscall generation for human68k

Karoly Balogh há 1 ano atrás
pai
commit
439faf0da8
3 ficheiros alterados com 22 adições e 2 exclusões
  1. 7 0
      compiler/m68k/n68kcal.pas
  2. 12 0
      compiler/pdecsub.pas
  3. 3 2
      compiler/syscinfo.pas

+ 7 - 0
compiler/m68k/n68kcal.pas

@@ -115,6 +115,13 @@ implementation
               else
                 internalerror(2017081201);
             end;
+          system_m68k_human68k:
+            begin
+              if po_syscall in tprocdef(procdefinition).procoptions then
+                begin
+                  current_asmdata.CurrAsmList.concat(tai_const.create_16bit(tprocdef(procdefinition).extnumber));
+                end;
+            end;
           else
             internalerror(2004042901);
         end;

+ 12 - 0
compiler/pdecsub.pas

@@ -2207,6 +2207,7 @@ procedure pd_syscall(pd:tabstractprocdef);
         case target_info.system of
           system_arm_palmos,
           system_m68k_palmos,
+          system_m68k_human68k,
           system_m68k_atari,
           system_m68k_amiga,
           system_powerpc_amiga:
@@ -2320,6 +2321,17 @@ begin
       exit;
     end;
 
+  if target_info.system = system_m68k_human68k then
+    begin
+      v:=get_intconst;
+      if ((v<$ff00) or (v>high(word))) then
+        message(parser_e_range_check_error)
+      else
+        tprocdef(pd).extnumber:=longint(v.svalue);
+
+      exit;
+    end;
+
   if consume_sym(sym,symtable) then
     if ((sym.typ=staticvarsym) or
         (sym.typ=absolutevarsym) and (tabsolutevarsym(sym).abstyp=toaddr)) and

+ 3 - 2
compiler/syscinfo.pas

@@ -38,7 +38,7 @@ type
 
 const
   syscall_conventions: array[1..10] of tsyscallinfo = (
-      ( token: NOTOKEN;    procoption: po_syscall;           validon: [system_m68k_atari,system_m68k_palmos,system_arm_palmos] ),
+      ( token: NOTOKEN;    procoption: po_syscall;           validon: [system_m68k_atari,system_m68k_palmos,system_arm_palmos,system_m68k_human68k] ),
       ( token: _LEGACY;    procoption: po_syscall_legacy;    validon: [system_powerpc_morphos,system_m68k_amiga] ),
       // old sysv naming, for compatibility only (on MorphOS/OS4)
       ( token: _SYSV;      procoption: po_syscall_basenone;  validon: [system_powerpc_morphos] ),
@@ -72,10 +72,11 @@ type
   end;
 
 const
-  default_syscall_conventions: array[0..8] of tsyscalldefaultinfo = (
+  default_syscall_conventions: array[0..9] of tsyscalldefaultinfo = (
       ( system: system_arm_palmos;      procoption: po_syscall ),
       ( system: system_m68k_palmos;     procoption: po_syscall ),
       ( system: system_m68k_atari;      procoption: po_syscall ),
+      ( system: system_m68k_human68k;   procoption: po_syscall ),
       ( system: system_m68k_amiga;      procoption: po_syscall_legacy ),
       ( system: system_powerpc_amiga;   procoption: po_syscall_basefirst ),
       ( system: system_powerpc_morphos; procoption: po_syscall_legacy ),