1.6 KiB
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