yaze 0.2.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
hyrule_magic.cc
Go to the documentation of this file.
1#include "hyrule_magic.h"
2
3namespace yaze {
4namespace zelda3 {
5
6namespace {
7
8// "load little endian value at the given byte offset and shift to get its
9// value relative to the base offset (powers of 256, essentially)"
10unsigned ldle(uint8_t const *const p_arr, unsigned const p_index) {
11 uint32_t v = p_arr[p_index];
12 v <<= (8 * p_index);
13 return v;
14}
15
16void stle(uint8_t *const p_arr, size_t const p_index, unsigned const p_val) {
17 uint8_t v = (p_val >> (8 * p_index)) & 0xff;
18 p_arr[p_index] = v;
19}
20
21void stle0(uint8_t *const p_arr, unsigned const p_val) {
22 stle(p_arr, 0, p_val);
23}
24
25void stle1(uint8_t *const p_arr, unsigned const p_val) {
26 stle(p_arr, 1, p_val);
27}
28
29void stle2(uint8_t *const p_arr, unsigned const p_val) {
30 stle(p_arr, 2, p_val);
31}
32
33void stle3(uint8_t *const p_arr, unsigned const p_val) {
34 stle(p_arr, 3, p_val);
35}
36
37// Helper function to get the first byte in a little endian number
38uint32_t ldle0(uint8_t const *const p_arr) { return ldle(p_arr, 0); }
39
40// Helper function to get the second byte in a little endian number
41uint32_t ldle1(uint8_t const *const p_arr) { return ldle(p_arr, 1); }
42
43// Helper function to get the third byte in a little endian number
44uint32_t ldle2(uint8_t const *const p_arr) { return ldle(p_arr, 2); }
45
46// Helper function to get the third byte in a little endian number
47uint32_t ldle3(uint8_t const *const p_arr) { return ldle(p_arr, 3); }
48
49} // namespace
50
51void stle16b_i(uint8_t *const p_arr, size_t const p_index,
52 uint16_t const p_val) {
53 stle16b(p_arr + (p_index * 2), p_val);
54}
55
56void stle16b(uint8_t *const p_arr, uint16_t const p_val) {
57 stle0(p_arr, p_val);
58 stle1(p_arr, p_val);
59}
60
61uint16_t ldle16b(uint8_t const *const p_arr) {
62 uint16_t v = 0;
63 v |= (ldle0(p_arr) | ldle1(p_arr));
64 return v;
65}
66
67uint16_t ldle16b_i(uint8_t const *const p_arr, size_t const p_index) {
68 return ldle16b(p_arr + (2 * p_index));
69}
70
71} // namespace zelda3
72} // namespace yaze
uint32_t ldle2(uint8_t const *const p_arr)
uint32_t ldle0(uint8_t const *const p_arr)
void stle2(uint8_t *const p_arr, unsigned const p_val)
void stle(uint8_t *const p_arr, size_t const p_index, unsigned const p_val)
unsigned ldle(uint8_t const *const p_arr, unsigned const p_index)
void stle0(uint8_t *const p_arr, unsigned const p_val)
uint32_t ldle3(uint8_t const *const p_arr)
void stle1(uint8_t *const p_arr, unsigned const p_val)
uint32_t ldle1(uint8_t const *const p_arr)
void stle3(uint8_t *const p_arr, unsigned const p_val)
Zelda 3 specific classes and functions.
void stle16b_i(uint8_t *const p_arr, size_t const p_index, uint16_t const p_val)
Store little endian 16-bit value using a byte pointer, offset by an index before dereferencing.
uint16_t ldle16b_i(uint8_t const *const p_arr, size_t const p_index)
Load little endian halfword (16-bit) dereferenced from an arrays of bytes. This version provides an i...
uint16_t ldle16b(uint8_t const *const p_arr)
void stle16b(uint8_t *const p_arr, uint16_t const p_val)
Main namespace for the application.
Definition controller.cc:18