1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-12-27 04:29:34 +00:00
millfork/docs/lang/interfacing.md

44 lines
1.1 KiB
Markdown
Raw Normal View History

2018-04-02 22:21:26 +00:00
[< back to index](../index.md)
2018-01-04 00:15:04 +00:00
# Interfacing with external code
2018-01-18 21:35:25 +00:00
## Calling external functions at a static address
To call an external function, you need to declare it as `asm extern`. For example:
```
asm void putchar(byte a) @$FFD2 extern
```
2018-01-31 21:25:06 +00:00
The function parameter will be passed via the accumulator,
2018-01-18 21:35:25 +00:00
the function itself is located in ROM at $FFD2. A call like this:
```
putchar(13)
```
will be compiled to something like this on 6502:
2018-01-18 21:35:25 +00:00
```
LDA #13
JSR $FFD2
```
For more details about how to pass parameters to `asm` functions, see:
* for 6502: [Using 6502 assembly within Millfork programs#Assembly functions](./assembly.md#assembly-functions).
* for Z80: [Using Z80 assembly within Millfork programs#Assembly functions](./assembly.md#assembly-functions).
2018-01-18 21:35:25 +00:00
## Calling external functions at a dynamic address
To call a function that has its address calculated dynamically,
you just need to do the same as what you would do in assembly; 6502 example:
2018-01-18 21:35:25 +00:00
```
asm void call_function(byte a) {
JMP (function_address)
}
```
where `function_address` is a variable that contains the address of the function to call.