GAMES ?= games.list MENU_IMAGE ?= menu_header.png LANGUAGE ?= eng SIZE ?= 32 MAXCHRSIZE?= 256 DUMPER_OPTS ?= --port auto NESASM_EXTRA_OPTS ?= OFFSETS ?= offsets_$(GAMES).json OUTPUT_UNIF ?= multirom_$(GAMES).unf OUTPUT_NES20 ?= multirom_$(GAMES).nes OUTPUT_BIN ?= multirom_$(GAMES).bin NESASM_OPTS += $(NESASM_EXTRA_OPTS) SOURCES = menu.asm banking.asm buildinfo.asm buttons.asm flash.asm loader.asm misc.asm preloader.asm saves.asm sounds.asm tests.asm video.asm CONFIGS_DIR = configs IMAGES_DIR = images # tools TILER = ./tools/nestiler COMBINER = ./tools/coolboy-combiner NESASM = ./tools/nesasm COLORS = ./tools/nestiler-colors.json EMU = fceux64 DUMPER = famicom-dumper SUBMAPPER ?= 0 ENABLE_SAVES ?= 0 ifneq ($(ENABLE_SAVES),0) SAVES_OPTION=--saves endif NOSORT ?= 0 ifneq ($(NOSORT),0) SORT_OPTION=--nosort endif BADSECTORS ?= -1 ifneq ($(BADSECTORS),-1) BADS_OPTION=--badsectors $(BADSECTORS) endif REPORT ?= ifneq ($(REPORT),) REPORT_OPTION=--report $(REPORT) endif NOLOCK ?= 0 LOCK_OPTION = --lock ifneq ($(NOLOCK),0) LOCK_OPTION= endif ENABLE_SOUND ?= -1 ifneq ($(ENABLE_SOUND),-1) NESASM_OPTS += -D ENABLE_SOUND=$(ENABLE_SOUND) endif STARS ?= -1 ifneq ($(STARS),-1) NESASM_OPTS += -D STARS=$(STARS) endif STARS_DIRECTION ?= -1 ifneq ($(STARS_DIRECTION),-1) NESASM_OPTS += -D STARS_DIRECTION=$(STARS_DIRECTION) endif STAR_SPAWN_INTERVAL ?= -1 ifneq ($(STAR_SPAWN_INTERVAL),-1) NESASM_OPTS += -D STAR_SPAWN_INTERVAL=$(STAR_SPAWN_INTERVAL) endif ENABLE_LAST_GAME_SAVING ?= -1 ifneq ($(ENABLE_LAST_GAME_SAVING),-1) NESASM_OPTS += -D ENABLE_LAST_GAME_SAVING=$(ENABLE_LAST_GAME_SAVING) endif ENABLE_RIGHT_CURSOR ?= -1 ifneq ($(ENABLE_RIGHT_CURSOR),-1) NESASM_OPTS += -D ENABLE_RIGHT_CURSOR=$(ENABLE_RIGHT_CURSOR) endif ENABLE_DIM_IN ?= -1 ifneq ($(ENABLE_DIM_IN),-1) NESASM_OPTS += -D ENABLE_DIM_IN=$(ENABLE_DIM_IN) endif DIM_IN_DELAY ?= -1 ifneq ($(DIM_IN_DELAY),-1) NESASM_OPTS += -D DIM_IN_DELAY=$(DIM_IN_DELAY) endif ENABLE_DIM_OUT ?= -1 ifneq ($(ENABLE_DIM_OUT),-1) NESASM_OPTS += -D ENABLE_DIM_OUT=$(ENABLE_DIM_OUT) endif DIM_OUT_DELAY ?= -1 ifneq ($(DIM_OUT_DELAY),-1) NESASM_OPTS += -D DIM_OUT_DELAY=$(DIM_OUT_DELAY) endif GAMES_DB = games_$(GAMES)_$(LANGUAGE).asm MENU_ROM ?= menu_$(GAMES_DB).nes MENU_HEADER_PATTERN_TABLE_BIN = menu_header_pattern_table_$(MENU_IMAGE).bin MENU_HEADER_NAME_TABLE_BIN = menu_header_name_table_$(MENU_IMAGE).bin MENU_HEADER_ATTRIBUTE_TABLE_BIN = menu_header_attribute_table_$(MENU_IMAGE).bin MENU_HEADER_BG_PALETTE_0 = bg_palette0_$(MENU_IMAGE).bin MENU_HEADER_BG_PALETTE_1 = bg_palette1_$(MENU_IMAGE).bin MENU_HEADER_BG_PALETTE_2 = bg_palette2_$(MENU_IMAGE).bin HEADER_FILES = $(MENU_HEADER_PATTERN_TABLE_BIN) $(MENU_HEADER_NAME_TABLE_BIN) \ $(MENU_HEADER_ATTRIBUTE_TABLE_BIN) $(MENU_HEADER_BG_PALETTE_0) \ $(MENU_HEADER_BG_PALETTE_1) $(MENU_HEADER_BG_PALETTE_2) FOOTER_FILES = footer.pt footer.nt SYMBOL_FILES = menu_symbols.bin SPRITE_FILES = menu_sprites.bin sprites_palette.bin NESASM_OPTS += -C MENU_HEADER_PATTERN_TABLE_BIN=$(MENU_HEADER_PATTERN_TABLE_BIN) \ -C MENU_HEADER_NAME_TABLE_BIN=$(MENU_HEADER_NAME_TABLE_BIN) \ -C MENU_HEADER_ATTRIBUTE_TABLE_BIN=$(MENU_HEADER_ATTRIBUTE_TABLE_BIN) \ -C MENU_HEADER_BG_PALETTE_0=$(MENU_HEADER_BG_PALETTE_0) \ -C MENU_HEADER_BG_PALETTE_1=$(MENU_HEADER_BG_PALETTE_1) \ -C MENU_HEADER_BG_PALETTE_2=$(MENU_HEADER_BG_PALETTE_2) default: $(OUTPUT_NES20) build: $(OUTPUT_NES20) all: $(OUTPUT_UNIF) $(OUTPUT_NES20) $(OUTPUT_BIN) $(MENU_ROM): $(SOURCES) $(GAMES_DB) $(HEADER_FILES) $(FOOTER_FILES) $(SYMBOL_FILES) $(SPRITE_FILES) $(NESASM) menu.asm --output=$(MENU_ROM) $(NESASM_OPTS) menu: $(MENU_ROM) $(GAMES_DB) $(OFFSETS): $(CONFIGS_DIR)/$(GAMES) $(COMBINER) prepare --games $(CONFIGS_DIR)/$(GAMES) --asm $(GAMES_DB) \ --maxromsize $(SIZE) --maxchrsize $(MAXCHRSIZE) \ --offsets $(OFFSETS) $(REPORT_OPTION) $(SORT_OPTION) \ --language $(LANGUAGE) $(BADS_OPTION) \ $(SAVES_OPTION) #$(OUTPUT_UNIF): $(SOURCES) $(HEADER_FILES) $(FOOTER_FILES) $(SYMBOL_FILES) $(SPRITE_FILES) $(MENU_ROM) $(OFFSETS) # $(COMBINER) combine --loader $(MENU_ROM) --offsets $(OFFSETS) --unif $(OUTPUT_UNIF) --submapper $(SUBMAPPER) $(OUTPUT_UNIF): $(SOURCES) $(HEADER_FILES) $(FOOTER_FILES) $(SYMBOL_FILES) $(SPRITE_FILES) $(CONFIGS_DIR)/$(GAMES) $(COMBINER) build --games $(CONFIGS_DIR)/$(GAMES) --asm $(GAMES_DB) \ --maxromsize $(SIZE) --maxchrsize $(MAXCHRSIZE) $(REPORT_OPTION) --submapper $(SUBMAPPER) $(SORT_OPTION) --language $(LANGUAGE) \ --nesasm $(NESASM) --nesasm-args "$(NESASM_OPTS)" $(BADS_OPTION) $(SAVES_OPTION) \ --unif $(OUTPUT_UNIF) unif: $(OUTPUT_UNIF) #$(OUTPUT_NES20): $(SOURCES) $(HEADER_FILES) $(FOOTER_FILES) $(SYMBOL_FILES) $(SPRITE_FILES) $(MENU_ROM) $(OFFSETS) # $(COMBINER) combine --loader $(MENU_ROM) --offsets $(OFFSETS) --nes20 $(OUTPUT_NES20) --submapper $(SUBMAPPER) $(OUTPUT_NES20): $(SOURCES) $(HEADER_FILES) $(FOOTER_FILES) $(SYMBOL_FILES) $(SPRITE_FILES) $(CONFIGS_DIR)/$(GAMES) $(COMBINER) build --games $(CONFIGS_DIR)/$(GAMES) --asm $(GAMES_DB) \ --maxromsize $(SIZE) --maxchrsize $(MAXCHRSIZE) $(REPORT_OPTION) --submapper $(SUBMAPPER) $(SORT_OPTION) --language $(LANGUAGE) \ --nesasm $(NESASM) --nesasm-args "$(NESASM_OPTS)" $(BADS_OPTION) $(SAVES_OPTION) \ --nes20 $(OUTPUT_NES20) nes20: $(OUTPUT_NES20) nes: nes20 #$(OUTPUT_BIN): $(SOURCES) $(HEADER_FILES) $(FOOTER_FILES) $(SYMBOL_FILES) $(SPRITE_FILES) $(MENU_ROM) $(OFFSETS) # $(COMBINER) combine --loader $(MENU_ROM) --offsets $(OFFSETS) --bin $(OUTPUT_BIN) --submapper $(SUBMAPPER) $(OUTPUT_BIN): $(SOURCES) $(HEADER_FILES) $(FOOTER_FILES) $(SYMBOL_FILES) $(SPRITE_FILES) $(CONFIGS_DIR)/$(GAMES) $(COMBINER) build --games $(CONFIGS_DIR)/$(GAMES) --asm $(GAMES_DB) \ --maxromsize $(SIZE) --maxchrsize $(MAXCHRSIZE) $(REPORT_OPTION) --submapper $(SUBMAPPER) $(SORT_OPTION) --language $(LANGUAGE) \ --nesasm $(NESASM) --nesasm-args "$(NESASM_OPTS)" $(BADS_OPTION) $(SAVES_OPTION) \ --bin $(OUTPUT_BIN) bin: $(OUTPUT_BIN) clean: rm -f stdout.txt *.nl *.lst *.bin *.txt games_*.asm menu_*.nes multirom_*.unf multirom_*.nes multirom_*.bin offsets*.json run: $(OUTPUT_NES20) $(EMU) $(OUTPUT_NES20) upload: $(OUTPUT_NES20) ./upload.bat $(OUTPUT_NES20) runmenu: $(MENU_ROM) $(EMU) $(MENU_ROM) write: $(OUTPUT_NES20) $(DUMPER) write-coolboy --file $(OUTPUT_NES20) --sound --check $(BADS_OPTION) $(LOCK_OPTION) --coolboy-submapper $(SUBMAPPER) $(DUMPER_OPTS) $(HEADER_FILES): $(IMAGES_DIR)/$(MENU_IMAGE) $(TILER) --colors $(COLORS) \ --i0 $(IMAGES_DIR)/$(MENU_IMAGE) \ --enable-palettes 0,1,2 \ --out-pattern-table0 $(MENU_HEADER_PATTERN_TABLE_BIN) \ --out-name-table0 $(MENU_HEADER_NAME_TABLE_BIN) \ --out-attribute-table0 $(MENU_HEADER_ATTRIBUTE_TABLE_BIN) \ --out-palette0 $(MENU_HEADER_BG_PALETTE_0) \ --out-palette1 $(MENU_HEADER_BG_PALETTE_1) \ --out-palette2 $(MENU_HEADER_BG_PALETTE_2) \ --bg-color \#000000 $(SYMBOL_FILES): $(IMAGES_DIR)/menu_symbols.png $(TILER) --colors $(COLORS) \ --i0 $(IMAGES_DIR)/menu_symbols.png \ --enable-palettes 3 \ --pattern-offset0 128 \ --pattern-offset1 224 \ --out-pattern-table0 menu_symbols.bin \ --out-palette3 bg_palette3.bin \ --bg-color \#000000 $(SPRITE_FILES): $(IMAGES_DIR)/menu_sprites.png $(TILER) --colors $(COLORS) \ --mode sprites \ --i0 $(IMAGES_DIR)/menu_sprites.png \ --enable-palettes 0 \ --out-pattern-table0 menu_sprites.bin \ --out-palette0 sprites_palette.bin \ --bg-color \#000000