git.y1.nz

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.