gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
gbdk-support/romusage/src/banks.h
1 // This is free and unencumbered software released into the public domain.
2 // For more information, please refer to <https://unlicense.org>
3 // bbbbbr 2020
4
5 #ifndef _BANKS_H
6 #define _BANKS_H
7
8 #include "list.h"
9
10 #define WRAM_X_MAX_BANKS 7
11
12 #define MAX_ADDR_UNBANKED 0x0000FFFFU
13 #define BANK_ADDR_ROM_UPPER_ST 0x00004000U // Upper ROM Bank address bit
14 #define BANK_ADDR_ROM_UPPER_END 0x00007FFFU // Upper ROM Bank address bit
15 #define BANK_ADDR_VADDR_MASK 0xFFFF0000U // Virtual addressing mask for where .noi files/etc store bank number
16 #define BANK_NUM_ROM1_VADDR (1u << 16)
17 #define BANK_NUM_ROM0 (0u)
18 #define BANK_NUM_ROM1 (1u)
19
20 // Used for ignoring address range check/clipping when copying
21 // areas from multiple banks into a single collapsed bank
22 #define ADDR_NO_CLIP_MIN 0x00000000
23 #define ADDR_NO_CLIP_MAX 0xFFFFFFFF
24
25 #define AREA_COPY_ADDRESS_TRANSLATE_YES true
26 #define AREA_COPY_ADDRESS_TRANSLATE_NO false
27
28 #define ARRAY_LEN(A) (sizeof(A) / sizeof(A[0]))
29 #define WITHOUT_BANK(addr) ((addr) & MAX_ADDR_UNBANKED)
30 #define BANK_GET_NUM(addr) (((addr) & BANK_ADDR_VADDR_MASK) >> 16)
31 #define BANK_ONLY(addr) ((addr) & BANK_ADDR_VADDR_MASK)
32 #define RANGE_SIZE(MIN, MAX) (MAX - MIN + 1)
33 #define UNBANKED_END(start, end) ((end - start) + WITHOUT_BANK(start))
34
35 #define AREA_MAX_STR DEFAULT_STR_LEN
36
37 #define BANK_MAX_STR DEFAULT_STR_LEN
38 #define BANKED_NO 0
39 #define BANKED_YES 1
40
41 #define BANK_STARTNUM_0 0
42 #define BANK_STARTNUM_1 1
43
44 #define BANK_MERGED_NO false
45 #define BANK_MERGED_YES true
46
47 #define HIDDEN_NO false
48 #define HIDDEN_YES true
49
50 #define MINIGRAPH_SIZE (2 * 14) // Number of characters wide (inside edge brackets)
51 #define LARGEGRAPH_BYTES_PER_CHAR 16
52
53 typedef enum {
54 BANK_MEM_TYPE_ROM,
55 BANK_MEM_TYPE_VRAM,
56 BANK_MEM_TYPE_SRAM,
57 BANK_MEM_TYPE_WRAM,
58 BANK_MEM_TYPE_HRAM
59 } bank_mem_types;
60
61
62 typedef struct area_item {
63 char name[AREA_MAX_STR];
64 uint32_t start;
65 uint32_t end;
66 uint32_t start_unbanked;
67 uint32_t end_unbanked;
68 uint32_t length;
69 bool exclusive;
70 } area_item;
71
72
73 typedef struct bank_item {
74 // Mostly fixed values
75 char name[BANK_MAX_STR];
76 uint32_t start;
77 uint32_t end; // May get modified for summarized output
78 int is_banked;
79 uint32_t overflow_end;
80
81 // Updateable values
82 uint32_t size_total;
83 uint32_t size_used;
84 int bank_num;
85
86 int bank_mem_type;
87 int base_bank_num;
88 bool is_merged_bank;
89 // End of templating vars
90 bool hidden;
91
92 // TODO: track overflow bytes and report them in graph
93 list_type area_list;
94 } bank_item;
95
96 void area_manual_apply_queued(void);
97 bool area_manual_queue(char * arg_str);
98
99 int bank_calc_percent_free(bank_item * p_bank);
100 int bank_calc_percent_used(bank_item * p_bank);
101
102 uint32_t bank_areas_calc_used(bank_item *, uint32_t, uint32_t);
103
104 void banks_output_show_areas(bool do_show);
105 void banks_output_show_headers(bool do_show);
106 void banks_output_show_minigraph(bool do_show);
107 void banks_output_show_largegraph(bool do_show);
108
109 void banks_init(void);
110 void banks_cleanup(void);
111 void banks_init_templates(void);
112
113 void set_exit_error(void);
114 bool get_exit_error(void);
115
116 void banks_check(area_item area);
117 void banklist_finalize_and_show(void);
118
119 void bank_areas_split_to_buckets(bank_item * p_bank, uint32_t range_start, uint32_t range_size, uint32_t range_buckets, uint32_t * p_buckes);
120
121
122 #endif // _BANKS_H
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.