Warning

You're browsing the old v2.x documentation. This version is no longer maintained. Click here to go the v3.x documentation.

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
proc [2019/06/06 08:38] – [Recursion] neilsproc [2020/08/07 08:52] (current) – Add note about naming thraka
Line 10: Line 10:
  
 The ''PROC'' command introduces a new procedure that spans until the ''ENDPROC'' command. Procedures are named subroutines that have a unique variable and label scope. Procedures may have one or more parameters that are passed to by the ''CALL'' command. The ''CALL'' command is the only way to execute a procedure (you can't ''GOTO'' into a procedure, for example). You can use ''RETURN'' to early exit a procedure. The ''PROC'' command introduces a new procedure that spans until the ''ENDPROC'' command. Procedures are named subroutines that have a unique variable and label scope. Procedures may have one or more parameters that are passed to by the ''CALL'' command. The ''CALL'' command is the only way to execute a procedure (you can't ''GOTO'' into a procedure, for example). You can use ''RETURN'' to early exit a procedure.
 +
 +The name of the procedure and the name of a parameter **can't** start with a command or directive name. For example, you can't define a procedure named ''repeatnumber'' as ''REPEAT'' is a command. Likewise, you can't name a parameter ''procparameter1'' as ''PROC'' is a directive.
  
 Example: Example:
Line 115: Line 117:
  
 When the compiler detects direct recursion, it generates code to save local variables and procedure parameters on the stack and restore them when the procedure returns. When the compiler detects direct recursion, it generates code to save local variables and procedure parameters on the stack and restore them when the procedure returns.
 +
 +==== Prevent stack overflow ====
  
 **Be careful with recursion**. The C64's stack is very small, it's very easy to provoke a stack overflow. To estimate how big stack space you'll need, you can use this formula: **Be careful with recursion**. The C64's stack is very small, it's very easy to provoke a stack overflow. To estimate how big stack space you'll need, you can use this formula:
Line 121: Line 125:
  
 Always leave some stack space for normal operations as well (8-16 bytes in general, but this can be more depending on the context). Always leave some stack space for normal operations as well (8-16 bytes in general, but this can be more depending on the context).
 +
 +**Tip**: a good practice to prevent stack overflow is to move as many local variables to the global scope as possible.