From 900feb941269d29cfc837e028a5cbf93ecf0f236 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Fri, 16 Jan 2015 16:03:36 +0000 Subject: [PATCH] tools/syscall_6502: generate correct fastcall stacking also don't delete syscall.s on clean --- Library/tools/syscall_6502.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Library/tools/syscall_6502.c b/Library/tools/syscall_6502.c index 422a7a28..5002bd6e 100644 --- a/Library/tools/syscall_6502.c +++ b/Library/tools/syscall_6502.c @@ -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"); -- 2.34.1