mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 10:12:06 +00:00
Implement warning diagnostic flags for RGBFIX (#1766)
* Implement warning diagnostic flags for RGBFIX * `-m/--mbc-type help` prints to stdout * Support `-m list` as well as `-m help` * Make invalid `rgbfix -l` characters a fatal error, like other invalid CLI arguments * Refactor fix/main.cpp into multiple files
This commit is contained in:
85
include/fix/mbc.hpp
Normal file
85
include/fix/mbc.hpp
Normal file
@@ -0,0 +1,85 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#ifndef RGBDS_FIX_MBC_HPP
|
||||
#define RGBDS_FIX_MBC_HPP
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
constexpr uint16_t UNSPECIFIED = 0x200;
|
||||
static_assert(UNSPECIFIED > 0xFF, "UNSPECIFIED should not be in byte range!");
|
||||
|
||||
enum MbcType {
|
||||
ROM = 0x00,
|
||||
ROM_RAM = 0x08,
|
||||
ROM_RAM_BATTERY = 0x09,
|
||||
|
||||
MBC1 = 0x01,
|
||||
MBC1_RAM = 0x02,
|
||||
MBC1_RAM_BATTERY = 0x03,
|
||||
|
||||
MBC2 = 0x05,
|
||||
MBC2_BATTERY = 0x06,
|
||||
|
||||
MMM01 = 0x0B,
|
||||
MMM01_RAM = 0x0C,
|
||||
MMM01_RAM_BATTERY = 0x0D,
|
||||
|
||||
MBC3 = 0x11,
|
||||
MBC3_TIMER_BATTERY = 0x0F,
|
||||
MBC3_TIMER_RAM_BATTERY = 0x10,
|
||||
MBC3_RAM = 0x12,
|
||||
MBC3_RAM_BATTERY = 0x13,
|
||||
|
||||
MBC5 = 0x19,
|
||||
MBC5_RAM = 0x1A,
|
||||
MBC5_RAM_BATTERY = 0x1B,
|
||||
MBC5_RUMBLE = 0x1C,
|
||||
MBC5_RUMBLE_RAM = 0x1D,
|
||||
MBC5_RUMBLE_RAM_BATTERY = 0x1E,
|
||||
|
||||
MBC6 = 0x20,
|
||||
|
||||
MBC7_SENSOR_RUMBLE_RAM_BATTERY = 0x22,
|
||||
|
||||
POCKET_CAMERA = 0xFC,
|
||||
|
||||
BANDAI_TAMA5 = 0xFD,
|
||||
|
||||
HUC3 = 0xFE,
|
||||
|
||||
HUC1_RAM_BATTERY = 0xFF,
|
||||
|
||||
// "Extended" values (still valid, but not directly actionable)
|
||||
|
||||
// A high byte of 0x01 means TPP1, the low byte is the requested features
|
||||
// This does not include SRAM, which is instead implied by a non-zero SRAM size
|
||||
// Note: Multiple rumble speeds imply rumble
|
||||
TPP1 = 0x100,
|
||||
TPP1_RUMBLE = 0x101,
|
||||
TPP1_MULTIRUMBLE = 0x102, // Should not be possible
|
||||
TPP1_MULTIRUMBLE_RUMBLE = 0x103,
|
||||
TPP1_TIMER = 0x104,
|
||||
TPP1_TIMER_RUMBLE = 0x105,
|
||||
TPP1_TIMER_MULTIRUMBLE = 0x106, // Should not be possible
|
||||
TPP1_TIMER_MULTIRUMBLE_RUMBLE = 0x107,
|
||||
TPP1_BATTERY = 0x108,
|
||||
TPP1_BATTERY_RUMBLE = 0x109,
|
||||
TPP1_BATTERY_MULTIRUMBLE = 0x10A, // Should not be possible
|
||||
TPP1_BATTERY_MULTIRUMBLE_RUMBLE = 0x10B,
|
||||
TPP1_BATTERY_TIMER = 0x10C,
|
||||
TPP1_BATTERY_TIMER_RUMBLE = 0x10D,
|
||||
TPP1_BATTERY_TIMER_MULTIRUMBLE = 0x10E, // Should not be possible
|
||||
TPP1_BATTERY_TIMER_MULTIRUMBLE_RUMBLE = 0x10F,
|
||||
|
||||
// Error values
|
||||
MBC_NONE = UNSPECIFIED, // No MBC specified, do not act on it
|
||||
};
|
||||
|
||||
void mbc_PrintAcceptedNames(FILE *file);
|
||||
|
||||
bool mbc_HasRAM(MbcType type);
|
||||
char const *mbc_Name(MbcType type);
|
||||
MbcType mbc_ParseName(char const *name, uint8_t &tpp1Major, uint8_t &tpp1Minor);
|
||||
|
||||
#endif // RGBDS_FIX_MBC_HPP
|
||||
42
include/fix/warning.hpp
Normal file
42
include/fix/warning.hpp
Normal file
@@ -0,0 +1,42 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#ifndef RGBDS_FIX_WARNING_HPP
|
||||
#define RGBDS_FIX_WARNING_HPP
|
||||
|
||||
#include "diagnostics.hpp"
|
||||
|
||||
enum WarningLevel {
|
||||
LEVEL_DEFAULT, // Warnings that are enabled by default
|
||||
LEVEL_ALL, // Warnings that probably indicate an error
|
||||
LEVEL_EVERYTHING, // Literally every warning
|
||||
};
|
||||
|
||||
enum WarningID {
|
||||
WARNING_MBC, // Issues with MBC specs
|
||||
WARNING_OVERWRITE, // Overwriting non-zero bytes
|
||||
WARNING_SGB, // SGB flag conflicts with old licensee code
|
||||
WARNING_TRUNCATION, // Truncating values to fit
|
||||
|
||||
NB_PLAIN_WARNINGS,
|
||||
|
||||
NB_WARNINGS = NB_PLAIN_WARNINGS,
|
||||
};
|
||||
|
||||
extern Diagnostics<WarningLevel, WarningID> warnings;
|
||||
|
||||
// Warns the user about problems that don't prevent fixing the ROM
|
||||
[[gnu::format(printf, 2, 3)]]
|
||||
void warning(WarningID id, char const *fmt, ...);
|
||||
|
||||
// Prints an error, and increments the error count
|
||||
[[gnu::format(printf, 1, 2)]]
|
||||
void error(char const *fmt, ...);
|
||||
|
||||
// Prints a fatal error and exits
|
||||
[[gnu::format(printf, 1, 2)]]
|
||||
void fatal(char const *fmt, ...);
|
||||
|
||||
void resetErrors();
|
||||
uint32_t checkErrors(char const *filename);
|
||||
|
||||
#endif // RGBDS_FIX_WARNING_HPP
|
||||
Reference in New Issue
Block a user