X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=lugburz;a=blobdiff_plain;f=src%2Famiga%2Famigalib.h;fp=src%2Famiga%2Famigalib.h;h=6a120691bd6e90153a12a2397b78129ecb48d091;hp=0000000000000000000000000000000000000000;hb=d166ef254c06ffbf7e4bb0450bd7d52e5ea82b0f;hpb=515574f76f8442b756fbbf87b41e340d6a78bc42 diff --git a/src/amiga/amigalib.h b/src/amiga/amigalib.h new file mode 100644 index 0000000..6a12069 --- /dev/null +++ b/src/amiga/amigalib.h @@ -0,0 +1,92 @@ +/* structures and functions necessary to access amiga ROM services */ +#ifndef AMIGALIB_H_ +#define AMIGALIB_H_ + +#include + +#define ALIB_MEMF_ANY 0L +#define ALIB_MEMF_PUBLIC 0x0001L +#define ALIB_MEMF_CHIP 0x0002L +#define ALIB_MEMF_FAST 0x0004L +#define ALIB_MEMF_CLEAR 0x0100L +#define ALIB_MEMF_LARGEST 0x0200L +#define ALIB_MEMF_REVERSE 0x0400L +#define ALIB_MEMF_TOTAL 0x0800L + +#define ALIB_NODE_COMMON(NODE_TYPE) \ + NODE_TYPE *n_next; \ + NODE_TYPE *n_prev; \ + uint8_t n_type; \ + int8_t n_prio; \ + char *n_name + +struct alib_memchunk { + struct alib_memchunk *next; + uint32_t size; +}; + +struct alib_memnode { + ALIB_NODE_COMMON(struct alib_memnode); + uint16_t attrib; + struct alib_memchunk *freelist; + void *start, *end; + uint32_t freesz; +}; + +struct alib_memlist { + struct alib_memnode *head, *tail, *tailpred; + uint8_t type; + uint8_t pad; +}; + +struct alib_library { + ALIB_NODE_COMMON(struct alib_library); + uint8_t flags; + uint8_t pad; + uint16_t negsz, possz; + uint16_t ver_major, ver_minor; + char *idstr; + uint32_t csum; + uint16_t nref; +}; + +struct alib_intvec { + void *data; + void (*code)(); + ALIB_NODE_COMMON(struct alib_intvec); +}; + +struct alib_execbase { + struct alib_library lib; + uint16_t softver; + int16_t lowmem_csum; + uint32_t chkbase; + void *coldcap_vect, *coolcap_vect, *warmcap_vect; + void *sysstack_upper, *sysstack_lower; + uint32_t chipmem_top; + void *dbg_entry, *dbg_data, *alert_data; + void *extmem_top; + uint16_t csum; + + struct alib_intvec intvec[16]; + + void *curtask; + uint32_t idle_count, disp_count; + uint16_t tmslice, nticks; + uint16_t sysflags; + int8_t intr_dis_nest, task_dis_nest; + uint16_t attn_flags, attn_resched; + void *resmod; + void *tasktrap, *taskexcept, *taks_exit; + uint32_t task_sig_alloc; + uint16_t task_trap_alloc; + + struct alib_memlist memlist; + /* ... more ... */ +}; + +struct alib_execbase *execbase; + +int alib_init(void); + +#endif /* AMIGALIB_H_ */