Hallo,
lern Assembler, lerne den Stack kennen, lerne, welche Variablen auf dem Stack landen, und zu guter letzt stell Dir die Frage, warum strcpy auf einen auf 30 Bytes auf dem Stack allozierten char[]-Bereich trotzdem mit 1000 bytes überschrieben kann, frag Dich, warum C kein Boundchecking hat, und erforsche, wo genau der Return-Pointer liegt. Wenn Du das weißt, frage Dich, warum Dein Code segfaulted, hast Du herausgefunden, daß der stack none-executable ist, finde einen Weg, den Code in den Heap zu legen.
Und wenn Du das kannst, erinner Dich daran, was
lda #$0
sta $d020
sta $d021
auf dem C64 damals ausgerichtet hat.
Gruß,
lazpel