GBDK 2020 Docs
API Documentation for GBDK 2020
far_ptr.h
Go to the documentation of this file.
1 
13 #ifndef __FAR_PTR_H_INCLUDE
14 #define __FAR_PTR_H_INCLUDE
15 
22 #define TO_FAR_PTR(ofs, seg) (((FAR_PTR)seg << 16) | (FAR_PTR)ofs)
23 
29 #define FAR_SEG(ptr) (((union __far_ptr *)&ptr)->segofs.seg)
30 
36 #define FAR_OFS(ptr) (((union __far_ptr *)&ptr)->segofs.ofs)
37 
38 #define FAR_FUNC(ptr, typ) ((typ)(((union __far_ptr *)&ptr)->segfn.fn))
39 
62 #define FAR_CALL(ptr, typ, ...) (__call_banked_ptr=ptr,((typ)(&__call__banked))(__VA_ARGS__))
63 
66 typedef uint32_t FAR_PTR;
67 
70 union __far_ptr {
72  struct {
73  void * ofs;
75  } segofs;
76  struct {
77  void (*fn)();
78  uint16_t seg;
79  } segfn;
80 };
81 
82 extern volatile FAR_PTR __call_banked_ptr;
83 extern volatile void * __call_banked_addr;
84 extern volatile uint8_t __call_banked_bank;
85 
87 
94 int32_t to_far_ptr(void* ofs, int16_t seg);
95 
96 #endif
uint8_t
unsigned char uint8_t
Definition: stdint.h:51
__call_banked_ptr
volatile FAR_PTR __call_banked_ptr
uint32_t
unsigned long int uint32_t
Definition: stdint.h:53
to_far_ptr
int32_t to_far_ptr(void *ofs, int16_t seg)
__far_ptr::ofs
void * ofs
Definition: far_ptr.h:73
__far_ptr::segfn
struct __far_ptr::@1 segfn
__call_banked_addr
volatile void * __call_banked_addr
uint16_t
unsigned short int uint16_t
Definition: stdint.h:52
int32_t
long int int32_t
Definition: stdint.h:45
int16_t
short int int16_t
Definition: stdint.h:44
__far_ptr::fn
void(* fn)()
Definition: far_ptr.h:77
__far_ptr::seg
uint16_t seg
Definition: far_ptr.h:74
__far_ptr
Definition: far_ptr.h:70
__call_banked_bank
volatile uint8_t __call_banked_bank
__far_ptr::ptr
FAR_PTR ptr
Definition: far_ptr.h:71
__far_ptr::segofs
struct __far_ptr::@0 segofs
__call__banked
void __call__banked()
FAR_PTR
uint32_t FAR_PTR
Definition: far_ptr.h:66