git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

commit 3a35fba3713095075d55e43604a98572457a956f
parent 68692cb7aee885057da222e26abeed7b121d65a5
Author: Toxa <untoxa@mail.ru>
Date:   Mon,  8 Jan 2024 18:45:44 +0300

Merge branch 'develop' of https://github.com/gbdk-2020/gbdk-2020 into develop

Diffstat:
Mgbdk-lib/examples/cross-platform/banks_farptr/src/bank2code.c6++++++
Mgbdk-lib/examples/cross-platform/banks_farptr/src/banks_farptr.c10+++++++++-
2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/gbdk-lib/examples/cross-platform/banks_farptr/src/bank2code.c b/gbdk-lib/examples/cross-platform/banks_farptr/src/bank2code.c @@ -19,3 +19,9 @@ int some_bank2_proc1(uint8_t param1, uint8_t param2) BANKED { printf("some_bank2_proc1\n"); return local_bank2_proc(param1, param2); } + +BANKREF(some_bank2_proc2) +int some_bank2_proc2(uint8_t param1, uint8_t param2, uint8_t param3) __banked REENTRANT { + printf("some_bank2_proc2\n"); + return local_bank2_proc(param1, param2 * param3); +} diff --git a/gbdk-lib/examples/cross-platform/banks_farptr/src/banks_farptr.c b/gbdk-lib/examples/cross-platform/banks_farptr/src/banks_farptr.c @@ -11,8 +11,11 @@ BANKREF_EXTERN(some_bank2_proc1) extern int some_bank2_proc1(uint8_t param1, uint8_t param2) BANKED; typedef int (*some_bank2_proc_t)(uint8_t, uint8_t) BANKED; // define type for some_bank2_proc1() function +BANKREF_EXTERN(some_bank2_proc2) +extern int some_bank2_proc2(uint8_t param1, uint8_t param2, uint8_t param3) __banked REENTRANT; + // far pointers -FAR_PTR farptr_var0, farptr_var1, farptr_var2; +FAR_PTR farptr_var0, farptr_var1, farptr_var2, farptr_var3; // result of a function call int res; @@ -22,6 +25,7 @@ void run(void) { farptr_var0 = to_far_ptr(some_bank2_proc1, BANK(some_bank2_proc1)); farptr_var1 = to_far_ptr(some_bank2_proc1, BANK(some_bank2_proc1)); farptr_var2 = to_far_ptr(some_bank2_proc0, BANK(some_bank2_proc0)); + farptr_var2 = to_far_ptr(some_bank2_proc0, BANK(some_bank2_proc0)); // output far pointers (must be identical) printf("FAR PTR0: %x:%x\n", (int)FAR_SEG(farptr_var0), (int)FAR_OFS(farptr_var0)); @@ -34,6 +38,10 @@ void run(void) { res = some_bank2_proc1(100, 50); printf("CALL DIR: %d\n", res); + // try calling reentrant far function directly + res = some_bank2_proc2(100, 50, 1); + printf("CALL DIR (RE): %d\n", res); + // try calling far function by far pointer #ifdef __PORT_mos6502 // SDCC mos6502 port does not appear to handle cast to typedef:ed function type some_bank2_proc_t correctly.

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.