V1.0
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
/* rac1_levels.h: the level programs compiled into the wrapper (docs/LEVELS.md).
|
||||
*
|
||||
* Each level carries its own build of the game program; ParseBin copies it
|
||||
* over the executable's main segment. build.py compiles the levels it is
|
||||
* asked for (--levels) and lists them in gen/level_table.c; ParseBin
|
||||
* (host/src/rac1/levels.c) finds the one being loaded there and switches the
|
||||
* trampolines and the recompiled code's dispatch table to it. */
|
||||
#ifndef RAC1_LEVELS_H
|
||||
#define RAC1_LEVELS_H
|
||||
#include "uya_runtime.h"
|
||||
|
||||
typedef struct RcCtx RcCtx;
|
||||
typedef struct { uint32_t addr; void (*fn)(RcCtx *); } rac1_rc_row_t;
|
||||
|
||||
typedef struct {
|
||||
int id; /* level index (docs/OVERLAYS.md, Levels) */
|
||||
uint32_t entry; /* the entry point ParseBin returns */
|
||||
uint32_t text_addr, text_bytes; /* its text record: how a loaded program is recognised */
|
||||
const uya_tramp_t *tramps; /* uya_tramp_table_lNN */
|
||||
const int *tramp_count;
|
||||
const rac1_rc_row_t *rc_table; /* rcNN_table: its recompiled functions and thunks by address */
|
||||
const int *rc_count;
|
||||
} rac1_level_t;
|
||||
|
||||
extern const rac1_level_t rac1_levels[];
|
||||
extern const int rac1_level_count;
|
||||
|
||||
/* host/src/rac1/rc_runtime.c: the table rc_dispatch looks addresses up in */
|
||||
void rc_set_table(const rac1_rc_row_t *table, int count);
|
||||
/* host/src/runtime.c */
|
||||
void uya_install_tramp_table(const uya_tramp_t *table, int count);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user