3 #include "pico_types.h"
5 typedef size_t (arearw)(void *p, size_t _size, size_t _n, void *file);
6 typedef size_t (areaeof)(void *file);
7 typedef int (areaseek)(void *file, long offset, int whence);
8 typedef int (areaclose)(void *file);
10 int PicoStateFP(void *afile, int is_save,
11 arearw *read, arearw *write, areaeof *eof, areaseek *seek);
13 static inline void save_u8_(u8 *buf, size_t *b, u32 u)
19 static inline void save_s8_(u8 *buf, size_t *b, s32 s)
21 s32 s_sext = (s32)((u32)s << 24) >> 24;
22 assert(s == s_sext); (void)s_sext;
26 static inline void save_u16(u8 *buf, size_t *b, u32 u)
28 assert(!(u & ~0xffff));
33 static inline void save_s16(u8 *buf, size_t *b, s32 s)
35 s32 s_sext = (s32)((u32)s << 16) >> 16;
36 assert(s == s_sext); (void)s_sext;
41 static inline void save_u32(u8 *buf, size_t *b, u32 u)
45 buf[(*b)++] = u >> 16;
46 buf[(*b)++] = u >> 24;
49 static inline void save_s32(u8 *buf, size_t *b, s32 s)
53 buf[(*b)++] = s >> 16;
54 buf[(*b)++] = s >> 24;
57 static inline u8 load_u8_(const u8 *buf, size_t *b)
62 static inline s8 load_s8_(const u8 *buf, size_t *b)
67 static inline u16 load_u16(const u8 *buf, size_t *b)
69 u16 r = (buf[*b + 1] << 8) | buf[*b];
74 static inline s16 load_s16(const u8 *buf, size_t *b)
76 s16 r = (buf[*b + 1] << 8) | buf[*b];
81 static inline u32 load_u32(const u8 *buf, size_t *b)
83 u32 r = (buf[*b + 3] << 24) | (buf[*b + 2] << 16) | (buf[*b + 1] << 8) | buf[*b];
88 static inline s32 load_s32(const u8 *buf, size_t *b)
90 s32 r = (buf[*b + 3] << 24) | (buf[*b + 2] << 16) | (buf[*b + 1] << 8) | buf[*b];