From 1c8e5b2945153305d0795921c2b3ea4d0d4e0d1d Mon Sep 17 00:00:00 2001 From: "BADIM-PC\\Vadim" Date: Thu, 9 Nov 2017 20:34:03 +0300 Subject: [PATCH] no message --- Makefile | 14 +++++--- src/console.c | 93 +++++++++++++++++++++++++++++++++++++++++++++------ src/tic.c | 2 +- 3 files changed, 93 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 052656e..325a5d4 100644 --- a/Makefile +++ b/Makefile @@ -274,16 +274,20 @@ emscripten: mingw: $(DEMO_ASSETS) $(TIC80_DLL) $(TIC_O) bin/html.o bin/res.o $(CC) $(TIC_O) bin/html.o bin/res.o $(TIC80_A) $(OPT) $(INCLUDES) $(MINGW_LINKER_FLAGS) -o $(MINGW_OUTPUT) -run: mingw +mingw-pro: + $(eval OPT += -DTIC80_PRO) + make mingw OPT="$(OPT)" + +run: mingw-pro $(MINGW_OUTPUT) -linux64-flto: +linux64-lto: $(CC) $(LINUX_INCLUDES) $(SOURCES) $(TIC80_SRC) $(SOURCES_EXT) $(OPT) $(INCLUDES) $(LINUX64_LIBS) $(LINUX_LINKER_FLAGS) -flto -o bin/tic -linux32-flto: +linux32-lto: $(CC) $(LINUX_INCLUDES) $(SOURCES) $(TIC80_SRC) $(SOURCES_EXT) $(OPT) $(INCLUDES) $(LINUX32_LIBS) $(LINUX_LINKER_FLAGS) -flto -o bin/tic -arm-flto: +arm-lto: $(CC) $(OPT_ARM) $(SOURCES) $(TIC80_SRC) $(OPT) $(INCLUDES) $(LINUX_ARM_LIBS) $(LINUX_LINKER_FLAGS) -flto -o bin/tic linux: @@ -339,4 +343,4 @@ bin/assets/moondemo.tic.dat: demos/moondemo.tic $(BIN2TXT) $< $@ -z clean: $(TIC_O) $(TIC80_O) - $(RM) $(TIC_O) $(TIC80_O) + del bin\*.o diff --git a/src/console.c b/src/console.c index fd872e6..66fae40 100644 --- a/src/console.c +++ b/src/console.c @@ -490,6 +490,69 @@ static void onConsoleLoadDemoCommandConfirmed(Console* console, const char* para SDL_free(data); } +static void onCartLoaded(Console* console, const char* name) +{ + strcpy(console->romName, name); + + studioRomLoaded(); + + printBack(console, "\ncart "); + printFront(console, console->romName); + printBack(console, " loaded!\nuse "); + printFront(console, "RUN"); + printBack(console, " command to run it\n"); + +} + +#if defined(TIC80_PRO) + +static void loadProjectCode(Console* console, const void* data, s32 size) +{ + tic_mem* tic = console->tic; + + SDL_memcpy(tic->cart.code.data, data, SDL_min(size, sizeof(tic_code))); +} + +static void loadProject(Console* console, const char* name) +{ + tic_mem* tic = console->tic; + + SDL_memset(&tic->cart, 0, sizeof(tic_cartridge)); + + static struct{const char* name; void(*func)(Console* console, const void* data, s32 size);} ProjectFiles[] = + { + {"code.lua", loadProjectCode}, + {"sprites.gif", NULL}, + {"tiles.gif", NULL}, + {"palette.dat", NULL}, + {"map.dat", NULL}, + {"waves.dat", NULL}, + {"sfx.dat", NULL}, + {"music.dat", NULL}, + {"cover.gif", NULL}, + }; + + for(s32 i = 0; i < COUNT_OF(ProjectFiles); i++) + { + char path[FILENAME_MAX]; + sprintf(path, "%s/%s", name, ProjectFiles[i].name); + + s32 size = 0; + void* data = fsLoadFile(console->fs, path, &size); + + if(data) + { + ProjectFiles[i].func(console, data, size); + SDL_free(data); + } + } + + onCartLoaded(console, name); + + commandDone(console); +} +#endif + static void onConsoleLoadCommandConfirmed(Console* console, const char* param) { if(onConsoleLoadSectionCommand(console, param)) return; @@ -499,6 +562,14 @@ static void onConsoleLoadCommandConfirmed(Console* console, const char* param) s32 size = 0; const char* name = getRomName(param); +#if defined(TIC80_PRO) + if(fsIsDir(console->fs, name)) + { + loadProject(console, name); + return; + } +#endif + void* data = strcmp(name, CONFIG_TIC_PATH) == 0 ? fsLoadRootFile(console->fs, name, &size) : fsLoadFile(console->fs, name, &size); @@ -507,21 +578,16 @@ static void onConsoleLoadCommandConfirmed(Console* console, const char* param) { console->showGameMenu = fsIsInPublicDir(console->fs); - strcpy(console->romName, name); - loadRom(console->tic, data, size, true); - studioRomLoaded(); - - printBack(console, "\ncart "); - printFront(console, console->romName); - printBack(console, " loaded!\nuse "); - printFront(console, "RUN"); - printBack(console, " command to run it\n"); + onCartLoaded(console, name); SDL_free(data); } - else printBack(console, "\ncart loading error"); + else + { + printBack(console, "\ncart loading error"); + } } else printBack(console, "\ncart name is missing"); @@ -676,13 +742,20 @@ typedef struct static bool printFilename(const char* name, const char* info, s32 id, void* data, bool dir) { + PrintFileNameData* printData = data; Console* console = printData->console; printLine(console); +#if defined(TIC80_PRO) + if(dir && SDL_strstr(name, CartExt) == (name + SDL_strlen(name) - SDL_strlen(CartExt))) + dir = false; +#endif + if(dir) { + printBack(console, "["); printBack(console, name); printBack(console, "]"); diff --git a/src/tic.c b/src/tic.c index 6b565b8..99c1a11 100644 --- a/src/tic.c +++ b/src/tic.c @@ -53,7 +53,7 @@ typedef enum CHUNK_TEMP3, // 8 CHUNK_SOUND, // 9 CHUNK_WAVEFORM, // 10 - CHUNK_OLDMUSIC, // 11 + CHUNK_TEMP4, // 11 CHUNK_PALETTE, // 12 CHUNK_PATTERNS, // 13 CHUNK_MUSIC, // 14