tools/syscall_6502: generate correct fastcall stacking also don't delete syscall...
authorAlan Cox <alan@linux.intel.com>
Fri, 16 Jan 2015 16:03:36 +0000 (16:03 +0000)
committerAlan Cox <alan@linux.intel.com>
Fri, 16 Jan 2015 16:03:36 +0000 (16:03 +0000)
Library/tools/syscall_6502.c

index 422a7a2..5002bd6 100644 (file)
@@ -19,9 +19,11 @@ static void write_call(int n)
     exit(1);
   }
   fprintf(fp, "\t.export _%s\n\n", syscall_name[n]);
-  fprintf(fp, ".proc _%s\n\tldx #%d\n", syscall_name[n], n);
+  fprintf(fp, "\t.import __syscall\n\n", syscall_name[n]);
+  fprintf(fp, "\t.import pushax\n\n");
+  fprintf(fp, ".proc _%s\n\tjsr pushax\n\tldx #%d\n", syscall_name[n], n);
   fprintf(fp, "\tldy #%d\n", 2 * syscall_args[n]);
-  fprintf(fp, "\tjmp ($fe)\n\n.endproc\n");
+  fprintf(fp, "\tjmp __syscall\n\n.endproc\n");
   fclose(fp);
 }
 
@@ -43,8 +45,9 @@ static void write_makefile(void)
   fprintf(fp, "# Autogenerated by tools/syscall_6502\n");
   fprintf(fp, "AS = ca65\n");
   fprintf(fp, "AR = ar65\n");
-  fprintf(fp, "ASRCS = syscall_%s.s\n", syscall_name[0]);
-  for (i = 1; i < NR_SYSCALL; i++)
+  fprintf(fp, "ASYS = syscall.s\n", syscall_name[0]);
+  fprintf(fp, "ASRCS = syscall_%s.s\n", syscall_name[i]);
+  for (i = 0; i < NR_SYSCALL; i++)
     fprintf(fp, "ASRCS += syscall_%s.s\n", syscall_name[i]);
   fprintf(fp, "\n\nASRCALL = $(ASRCS) $(ASYS)\n");
   fprintf(fp, "\nAOBJS = $(ASRCALL:.s=.o)\n\n");