1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-07-06 00:28:55 +00:00
millfork/docs/abi/calling-convention.md
2018-07-24 01:43:59 +02:00

1.6 KiB

< back to index

Millfork calling convention

Note: all the info below may change without any warning and is given only for debugging purposes.

6502

Parameters:

  • if the function has one parameter of size one byte, it is passed via the A register

  • otherwise, all parameters are passed via static locations

Return values:

  • one-byte return values are passed via the A register

  • two-byte return values are passed via the A (low byte) and X (high byte) register

Register preservation:

  • callee may clobber all three registers (A, X, Y) and most flags (Z, V, C, N, and also I if using inline assembly)

  • callee expects the D flag to be clear and will leave it clear

  • on 65816: callee will preserve the emulation flag (setting the emulation flag correctly is the responsibility of the initialization code)

  • on 65816 in native mode:

    • callee expects the M and X flag to be set and will leave them set (8-bit accumulator and index registers by default)

    • callee expects the direct page register to be set to 0000 and will not change it

Z80

Parameters:

  • if the function has one parameter of size one byte, it is passed via the A register

  • if the function has one parameter of size two bytes, it is passed via the HL register pair

  • otherwise, all parameters are passed via static locations

Return values:

  • one-byte return values are passed via the A register

  • two-byte return values are passed via the HL register pair

Register preservation:

  • callee may clobber all flags

  • callee may clobber all registers except for IX, IY and shadow registers