Merge pull request #213 from PikalaxALT/pikalax_work

Misc cleanup
This commit is contained in:
Cleverking2003
2020-07-03 19:02:29 +03:00
committed by GitHub
7 changed files with 1 additions and 561 deletions

View File

@@ -72,102 +72,6 @@ S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s))
O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \
$(foreach file,$(S_FILES),$(BUILD_DIR)/$(file:.s=.o)) \
ARM9SBIN := arm9/$(BUILD_DIR)/arm9.sbin
ARM7SBIN := arm7/build/arm7.sbin
SBINFILES = \
$(ARM9SBIN) \
$(ARM9SBIN:%.sbin=%_table.sbin) \
$(ARM9SBIN:%.sbin=%_defs.sbin) \
$(ARM7SBIN) \
arm9/$(BUILD_DIR)/MODULE_00.sbin \
arm9/$(BUILD_DIR)/MODULE_01.sbin \
arm9/$(BUILD_DIR)/MODULE_02.sbin \
arm9/$(BUILD_DIR)/MODULE_03.sbin \
arm9/$(BUILD_DIR)/MODULE_04.sbin \
arm9/$(BUILD_DIR)/MODULE_05.sbin \
arm9/$(BUILD_DIR)/MODULE_06.sbin \
arm9/$(BUILD_DIR)/MODULE_07.sbin \
arm9/$(BUILD_DIR)/MODULE_08.sbin \
arm9/$(BUILD_DIR)/MODULE_09.sbin \
arm9/$(BUILD_DIR)/MODULE_10.sbin \
arm9/$(BUILD_DIR)/MODULE_11.sbin \
arm9/$(BUILD_DIR)/MODULE_12.sbin \
arm9/$(BUILD_DIR)/MODULE_13.sbin \
arm9/$(BUILD_DIR)/MODULE_14.sbin \
arm9/$(BUILD_DIR)/MODULE_15.sbin \
arm9/$(BUILD_DIR)/MODULE_16.sbin \
arm9/$(BUILD_DIR)/MODULE_17.sbin \
arm9/$(BUILD_DIR)/MODULE_18.sbin \
arm9/$(BUILD_DIR)/MODULE_19.sbin \
arm9/$(BUILD_DIR)/MODULE_20.sbin \
arm9/$(BUILD_DIR)/MODULE_21.sbin \
arm9/$(BUILD_DIR)/MODULE_22.sbin \
arm9/$(BUILD_DIR)/MODULE_23.sbin \
arm9/$(BUILD_DIR)/MODULE_24.sbin \
arm9/$(BUILD_DIR)/MODULE_25.sbin \
arm9/$(BUILD_DIR)/MODULE_26.sbin \
arm9/$(BUILD_DIR)/MODULE_27.sbin \
arm9/$(BUILD_DIR)/MODULE_28.sbin \
arm9/$(BUILD_DIR)/MODULE_29.sbin \
arm9/$(BUILD_DIR)/MODULE_30.sbin \
arm9/$(BUILD_DIR)/MODULE_31.sbin \
arm9/$(BUILD_DIR)/MODULE_32.sbin \
arm9/$(BUILD_DIR)/MODULE_33.sbin \
arm9/$(BUILD_DIR)/MODULE_34.sbin \
arm9/$(BUILD_DIR)/MODULE_35.sbin \
arm9/$(BUILD_DIR)/MODULE_36.sbin \
arm9/$(BUILD_DIR)/MODULE_37.sbin \
arm9/$(BUILD_DIR)/MODULE_38.sbin \
arm9/$(BUILD_DIR)/MODULE_39.sbin \
arm9/$(BUILD_DIR)/MODULE_40.sbin \
arm9/$(BUILD_DIR)/MODULE_41.sbin \
arm9/$(BUILD_DIR)/MODULE_42.sbin \
arm9/$(BUILD_DIR)/MODULE_43.sbin \
arm9/$(BUILD_DIR)/MODULE_44.sbin \
arm9/$(BUILD_DIR)/MODULE_45.sbin \
arm9/$(BUILD_DIR)/MODULE_46.sbin \
arm9/$(BUILD_DIR)/MODULE_47.sbin \
arm9/$(BUILD_DIR)/MODULE_48.sbin \
arm9/$(BUILD_DIR)/MODULE_49.sbin \
arm9/$(BUILD_DIR)/MODULE_50.sbin \
arm9/$(BUILD_DIR)/MODULE_51.sbin \
arm9/$(BUILD_DIR)/MODULE_52.sbin \
arm9/$(BUILD_DIR)/MODULE_53.sbin \
arm9/$(BUILD_DIR)/MODULE_54.sbin \
arm9/$(BUILD_DIR)/MODULE_55.sbin \
arm9/$(BUILD_DIR)/MODULE_56.sbin \
arm9/$(BUILD_DIR)/MODULE_57.sbin \
arm9/$(BUILD_DIR)/MODULE_58.sbin \
arm9/$(BUILD_DIR)/MODULE_59.sbin \
arm9/$(BUILD_DIR)/MODULE_60.sbin \
arm9/$(BUILD_DIR)/MODULE_61.sbin \
arm9/$(BUILD_DIR)/MODULE_62.sbin \
arm9/$(BUILD_DIR)/MODULE_63.sbin \
arm9/$(BUILD_DIR)/MODULE_64.sbin \
arm9/$(BUILD_DIR)/MODULE_65.sbin \
arm9/$(BUILD_DIR)/MODULE_66.sbin \
arm9/$(BUILD_DIR)/MODULE_67.sbin \
arm9/$(BUILD_DIR)/MODULE_68.sbin \
arm9/$(BUILD_DIR)/MODULE_69.sbin \
arm9/$(BUILD_DIR)/MODULE_70.sbin \
arm9/$(BUILD_DIR)/MODULE_71.sbin \
arm9/$(BUILD_DIR)/MODULE_72.sbin \
arm9/$(BUILD_DIR)/MODULE_73.sbin \
arm9/$(BUILD_DIR)/MODULE_74.sbin \
arm9/$(BUILD_DIR)/MODULE_75.sbin \
arm9/$(BUILD_DIR)/MODULE_76.sbin \
arm9/$(BUILD_DIR)/MODULE_77.sbin \
arm9/$(BUILD_DIR)/MODULE_78.sbin \
arm9/$(BUILD_DIR)/MODULE_79.sbin \
arm9/$(BUILD_DIR)/MODULE_80.sbin \
arm9/$(BUILD_DIR)/MODULE_81.sbin \
arm9/$(BUILD_DIR)/MODULE_82.sbin \
arm9/$(BUILD_DIR)/MODULE_83.sbin \
arm9/$(BUILD_DIR)/MODULE_84.sbin \
arm9/$(BUILD_DIR)/MODULE_85.sbin \
arm9/$(BUILD_DIR)/MODULE_86.sbin
##################### Compiler Options #######################
MWCCVERSION = 2.0/sp1
@@ -183,7 +87,6 @@ MWCCARM = tools/mwccarm/$(MWCCVERSION)/mwccarm.exe
KNARC = tools/knarc/knarc$(EXE)
MWLDARM = tools/mwccarm/$(MWCCVERSION)/mwldarm.exe
MWASMARM = tools/mwccarm/$(MWCCVERSION)/mwasmarm.exe
NARCCOMP = tools/narccomp/narccomp$(EXE)
SCANINC = tools/scaninc/scaninc$(EXE)
AS = $(WINE) $(MWASMARM)

View File

@@ -66,94 +66,7 @@ LIBS_OBJS = $(LIBS_FILES:%.s=$(BUILD_DIR)/%.o)
O_FILES := $(C_OBJS) $(CXX_OBJS) $(S_OBJS)
# Overlay modules
OVERLAYS := \
MODULE_00 \
MODULE_01 \
MODULE_02 \
MODULE_03 \
MODULE_04 \
MODULE_05 \
MODULE_06 \
MODULE_07 \
MODULE_08 \
MODULE_09 \
MODULE_10 \
MODULE_11 \
MODULE_12 \
MODULE_13 \
MODULE_14 \
MODULE_15 \
MODULE_16 \
MODULE_17 \
MODULE_18 \
MODULE_19 \
MODULE_20 \
MODULE_21 \
MODULE_22 \
MODULE_23 \
MODULE_24 \
MODULE_25 \
MODULE_26 \
MODULE_27 \
MODULE_28 \
MODULE_29 \
MODULE_30 \
MODULE_31 \
MODULE_32 \
MODULE_33 \
MODULE_34 \
MODULE_35 \
MODULE_36 \
MODULE_37 \
MODULE_38 \
MODULE_39 \
MODULE_40 \
MODULE_41 \
MODULE_42 \
MODULE_43 \
MODULE_44 \
MODULE_45 \
MODULE_46 \
MODULE_47 \
MODULE_48 \
MODULE_49 \
MODULE_50 \
MODULE_51 \
MODULE_52 \
MODULE_53 \
MODULE_54 \
MODULE_55 \
MODULE_56 \
MODULE_57 \
MODULE_58 \
MODULE_59 \
MODULE_60 \
MODULE_61 \
MODULE_62 \
MODULE_63 \
MODULE_64 \
MODULE_65 \
MODULE_66 \
MODULE_67 \
MODULE_68 \
MODULE_69 \
MODULE_70 \
MODULE_71 \
MODULE_72 \
MODULE_73 \
MODULE_74 \
MODULE_75 \
MODULE_76 \
MODULE_77 \
MODULE_78 \
MODULE_79 \
MODULE_80 \
MODULE_81 \
MODULE_82 \
MODULE_83 \
MODULE_84 \
MODULE_85 \
MODULE_86 \
OVERLAYS := $(shell grep -oE "Overlay \w+" $(LD_SPEC) | cut -d' ' -f2)
.SECONDARY:
.DELETE_ON_ERROR:
@@ -285,9 +198,6 @@ $(S_OBJS) $(LIBS_OBJS): $(BUILD_DIR)/%.o: %.s $$(dep)
$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SPEC) $(LD_TEMPLATE)
$(MAKELCF) $(MAKELCF_FLAGS) $^ $@
#$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT)
# $(CPP) $(VERSION_CFLAGS) -MMD -MP -MT $@ -MF $@.d -I include/ -I . -DBUILD_DIR=$(BUILD_DIR) -o $@ $<
$(ROM): $(BUILD_DIR)/$(LD_SCRIPT) $(O_FILES) $(STATIC_LIBS)
cd $(BUILD_DIR) && LM_LICENSE_FILE=../../$(LM_LICENSE_FILE) $(WINE) ../../$(MWLDARM) $(LDFLAGS) $(LIBS) -o ../../$(ELF) $(LD_SCRIPT) $(O_FILES:$(BUILD_DIR)/%=%)
$(OBJCOPY) $(foreach ov,arm9 $(OVERLAYS),--update-section $(ov)=$(BUILD_DIR)/$(ov).sbin -j $(ov)) $(ELF) 2>/dev/null

View File

@@ -44,7 +44,6 @@ MWCCARM = ../../tools/mwccarm/$(MWCCVERSION)/mwccarm.exe
# only dependency should be MWCCARM.
MWLDARM = ../../tools/mwccarm/$(MWCCVERSION)/mwldarm.exe
MWASMARM = ../../tools/mwccarm/$(MWCCVERSION)/mwasmarm.exe
NARCCOMP = ../../tools/narccomp/narccomp$(EXE)
SCANINC = ../../tools/scaninc/scaninc$(EXE)
AS = $(WINE) $(MWASMARM)

View File

@@ -1,98 +0,0 @@
/* Linker Script to build Pokemon Diamond */
#define BEGIN_SEG(name, addr) \
_##name##SegmentStart = ADDR(.name); \
_##name##SegmentRomStart = __romPos; \
.name addr : AT(__romPos)
#define END_SEG(name) \
_##name##SegmentEnd = ADDR(.name) + SIZEOF(.name); \
_##name##SegmentRomEnd = __romPos + SIZEOF(.name); \
_##name##SegmentSize = SIZEOF(.name); \
__romPos += SIZEOF(.name);
SECTIONS {
__romPos = 0;
BEGIN_SEG(ARM7Overlay, 0)
{
}
END_SEG(ARM7Overlay)
BEGIN_SEG(header, 0x0)
{
build/asm/rom_header.o(.text);
. = 0x4000;
} =0
END_SEG(header)
BEGIN_SEG(arm9, 0x2000000)
{
build/asm/secure.o(.text);
build/asm/entry.o(.text);
build/asm/main.o(.text);
build/src/sub_02000DF4.o(.text);
build/asm/arm9_thumb.o(.text);
build/asm/rom2.o(.text);
}
END_SEG(arm9)
garbage :
{
build/asm/unk_10b724.o(.text);
}=0
. = 0x10B800;__romPos = .;
BEGIN_SEG(ARM9Overlay, 0)
{
build/asm/arm9overlay.o(.text);
}
END_SEG(ARM9Overlay)
. = 0x10C400;__romPos = .;
BEGIN_SEG(rom3, 0) /* shrug */
{
build/asm/rom3.o(.text);
}
END_SEG(rom3)
. = 0x30D000;__romPos = .;
BEGIN_SEG(arm7, 0x02380000)
{
build/asm/arm7_rom.o(.text);
}
END_SEG(arm7)
. = 0x336400;__romPos = .;
BEGIN_SEG(FileNameTable, 0)
{
build/asm/filenametable.o(.text);
}
END_SEG(FileNameTable)
. = 0x337A00;__romPos = .;
BEGIN_SEG(FileAllocationTable, 0)
{
build/asm/fat.o(.text);
}
END_SEG(FileAllocationTable)
. = 0x338600;__romPos = .;
BEGIN_SEG(Icon, __romPos)
{
build/asm/icon.o(.text);
build/asm/title.o(.text);
}
END_SEG(Icon)
. = 0x339000;__romPos = .;
BEGIN_SEG(NARC, 0)
{
build/asm/narc.o(.text);
}
END_SEG(NARC)
/DISCARD/ :
{
*(*);
}
}

View File

@@ -1 +0,0 @@
narccomp

View File

@@ -1,12 +0,0 @@
CXXFLAGS := -O3 -std=c++11
.PHONY: all clean
all: narccomp
@:
clean:
$(RM) narccomp narccomp.exe
narccomp: narccomp.cpp
$(CXX) $(CXXFLAGS) -o $@ $^

View File

@@ -1,261 +0,0 @@
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstring>
#include <sstream>
#include <map>
#include <set>
using namespace std;
struct Options
{
fstream outfile;
map<string, string> infiles;
unsigned char padval;
bool keep_names;
string host_root;
string nitro_root;
Options(int const & argc, char ** const & argv) :
// Default values
padval(255),
keep_names(false)
{
char last_opt = 0;
string outfname; // Use this to avoid clobbering an existing file in the event of an error
for (string arg : vector<char *>(argv + 1, argv + argc))
{
if (last_opt != 0) {
switch (last_opt)
{
case 'p':
{
// Padding
unsigned long x;
stringstream is(arg);
is >> x;
if (x >= 256) {
stringstream ss;
ss << "Invalid value for -p: " << x << endl;
throw invalid_argument(ss.str());
}
padval = x;
break;
}
case 'o':
// Outfile
if (!outfname.empty()) {
throw invalid_argument("Can't output more than one file\n");
}
outfname = arg;
break;
case 'r':
// Not fully implemented
if (!host_root.empty()) {
throw invalid_argument("Duplicate settings for option -r\n");
}
host_root = arg;
break;
case 'R':
// Not fully implemented
if (!nitro_root.empty()) {
throw invalid_argument("Duplicate settings for option -R\n");
}
nitro_root = arg;
break;
default:
stringstream ss;
ss << "Unrecognized option: -" << (char)last_opt << endl;
throw invalid_argument(ss.str());
}
last_opt = 0;
}
else if (arg[0] == '-') {
if (arg[1] == 0 || arg[2] != 0) {
stringstream ss;
ss << "Unrecognized option: " << arg << endl;
throw invalid_argument(ss.str());
}
switch (arg[1]) {
case 'h':
cout << "Usage: " << argv[0] << " [-p PADVAL] [-h] -o OUTFILE FILE [FILE ...]" << endl;
cout << endl;
cout << " FILE [FILE ...] List of files to be packed into the archive." << endl;
cout << " -o OUTFILE The destination archive, in NARC format" << endl;
cout << " -p PADVAL Pad archive members to word with this character. Default: 255" << endl;
cout << " -h Print this message and exit" << endl;
exit(0);
case 'k':
throw invalid_argument("'-k': not implemented\n");
// if (keep_names) {
// throw invalid_argument("'-k' specified more than once\n");
// }
// keep_names = true;
// break;
default:
last_opt = arg[1];
}
}
else
{
fstream file;
stringstream uss;
if (!infiles[arg].empty()) {
stringstream ss;
ss << "Duplicate file: " << arg << endl;
throw invalid_argument(ss.str());
}
file.open(arg, ios_base::in | ios_base::binary);
uss << file.rdbuf();
file.close();
infiles[arg] = uss.str();
}
}
if (outfname.empty()) {
throw invalid_argument("Must specify an output file (-o OUTFILE)\n");
}
if (infiles.empty()) {
throw invalid_argument("No input files\n");
}
outfile.open(outfname, ios_base::binary | ios_base::out);
}
};
struct FatbEntry
{
uint32_t start;
uint32_t end;
};
struct FatbHeader
{
char magic[4];
uint32_t chunk_size;
uint16_t file_count;
char padding[2];
FatbHeader(uint16_t numfiles) :
chunk_size(sizeof(FatbHeader) + sizeof(FatbEntry) * numfiles),
file_count(numfiles)
{ strncpy(magic, "BTAF", 4); memset(padding, 0, 2); }
};
struct FntbDirHeader
{
uint32_t offset;
uint16_t first_file;
uint16_t id_or_count;
};
struct FntbHeader
{
char magic[4];
uint32_t chunk_size;
FntbHeader() :
chunk_size(sizeof(FntbHeader) + sizeof(FntbDirHeader))
{ strncpy(magic, "BTNF", 4); }
string set_names(Options*& opt, FntbDirHeader*& dirHeader) {
throw runtime_error("not implemented\n");
// typedef struct NitroFS {
// bool is_dir;
// vector<struct NitroFS> children;
// } nitrofs_t;
// map<string, nitrofs_t> fs;
// fs[opt->nitro_root].is_dir = true;
// string host_root;
// for (auto pair : opt->infiles) {
// string fname = pair.first;
// fname = fname.replace(0, opt->host_root.size(), opt->nitro_root);
// int pos;
// while ((pos = fname.find("//")) != fname.npos) {
// fname = fname.replace(pos, 2, 1, '/');
// }
// }
// return nullptr;
}
};
#define FNT_END 0
#define FNT_LENGTH_MASK 0x7F
#define FNT_IS_DIR_MASK 0x80
struct FimgHeader
{
char magic[4];
uint32_t chunk_size;
FimgHeader(size_t image_size) :
chunk_size(sizeof(FimgHeader) + image_size)
{ strncpy(magic, "GMIF", 4); }
};
struct NarcHeader
{
char magic[4]; // NARC
uint16_t bom;
uint16_t version;
uint32_t size;
uint16_t chunk_size;
uint16_t num_chunks;
NarcHeader(uint16_t numfiles, size_t image_size) :
bom(0xFFFE),
version(0x0100),
size(sizeof(NarcHeader) + sizeof(FatbHeader) + sizeof(FatbEntry) * numfiles + sizeof(FntbHeader) + sizeof(FntbDirHeader) + sizeof(FimgHeader) + image_size),
chunk_size(sizeof(NarcHeader)),
num_chunks(3)
{ strncpy(magic, "NARC", 4); }
};
int main(int argc, char ** argv)
{
try
{
auto opt = new Options(argc, argv);
size_t nfiles = opt->infiles.size();
auto fatb = new FatbEntry[nfiles];
FatbEntry *entry = fatb;
for (auto pair : opt->infiles)
{
entry->start = (entry == fatb ? 0 : (entry[-1].end + 3) & ~3);
entry->end = entry->start + pair.second.size();
entry++;
}
size_t image_size = (fatb[nfiles - 1].end + 3) & ~3;
FntbHeader fntbHeader;
auto fntbDir = new FntbDirHeader;
*fntbDir = (FntbDirHeader) {4, 0, 1}; // dummy
stringstream fnt;
if (opt->keep_names)
{
fntbHeader.set_names(opt, fntbDir);
}
NarcHeader narcHeader(nfiles, (fatb[nfiles - 1].end + 3) & ~3);
FatbHeader fatbHeader(nfiles);
FimgHeader fimgHeader((fatb[nfiles - 1].end + 3) & ~3);
opt->outfile.write((char *) &narcHeader, sizeof(NarcHeader));
opt->outfile.write((char *) &fatbHeader, sizeof(FatbHeader));
opt->outfile.write((char *) fatb, sizeof(FatbEntry) * nfiles);
opt->outfile.write((char *) &fntbHeader, sizeof(FntbHeader));
opt->outfile.write((char *) fntbDir, sizeof(FntbDirHeader));
opt->outfile.write((char *) &fimgHeader, sizeof(FimgHeader));
char padding[4];
memset(padding, opt->padval, 4);
for (auto pair : opt->infiles)
{
stringstream uss(pair.second);
opt->outfile.write(pair.second.c_str(), pair.second.size());
opt->outfile.write(padding, (4 - pair.second.size()) & 3);
}
opt->outfile.close();
return 0;
} catch (invalid_argument e) {
cerr << "Invalid exception: " << e.what() << endl;
return 1;
} catch (runtime_error e) {
cerr << "Runtime error: " << e.what() << endl;
return 2;
} catch (exception e) {
cerr << "unhandled exception caught" << endl;
return 3;
}
}