From 485227f479f2e52ab02ea36ca4ea0b842eb7cfad Mon Sep 17 00:00:00 2001 From: ariahiro64 Date: Sat, 25 Sep 2021 19:28:42 -0400 Subject: [PATCH] add moparisthebes's improvements and build with docker --- .gitignore | 7 --- Makefile | 108 ++++++++++++++--------------------- README.md | 48 +++++----------- azure-pipelines.yml | 68 ---------------------- bin/ejectjs.bat | 107 ----------------------------------- build.cmd | 21 +++++-- docker/Dockerfile | 25 ++++++++ docker/setup-linux.sh | 94 ++++++++++++++++++++++++++++++ inc/menu.h | 1 - n64ld.x | 113 ------------------------------------- res/ALT64.INI | 9 ++- src/image.c | 2 +- src/main.c | 86 ++++++++++++++++------------ src/menu_about.c | 30 +--------- src/sound.c | 5 -- tools/deploy-sd.sh | 6 +- tools/extract-firmware.cmd | 4 +- update-libs.ps1 | 36 ------------ 18 files changed, 255 insertions(+), 515 deletions(-) delete mode 100755 azure-pipelines.yml delete mode 100755 bin/ejectjs.bat create mode 100644 docker/Dockerfile create mode 100644 docker/setup-linux.sh delete mode 100755 n64ld.x delete mode 100755 update-libs.ps1 diff --git a/.gitignore b/.gitignore index 0d96653..209a154 100755 --- a/.gitignore +++ b/.gitignore @@ -17,10 +17,3 @@ *properties.json /.vs /.vscode - -/toolchain/* -/lib/* -/include/* -/temp -*.zip -toolchain/ diff --git a/Makefile b/Makefile index 0c56d74..8bc3004 100755 --- a/Makefile +++ b/Makefile @@ -1,85 +1,61 @@ # -# Copyright (c) 2020 The Altra64 project contributors +# Copyright (c) 2017 The Altra64 project contributors # See LICENSE file in the project root for full license information. # -ifdef SystemRoot -FIXPATH = $(subst /,\,$1) -RM = DEL /Q -else -FIXPATH = $1 -RM = rm -f -endif - -ROOTDIR = $(CURDIR) -SRCDIR = $(ROOTDIR)/src -OBJDIR = $(ROOTDIR)/obj -BINDIR = $(ROOTDIR)/bin -LIBDIR = $(ROOTDIR)/lib -RESDIR = $(ROOTDIR)/res - -CHKSUM64 = $(ROOTDIR)/toolchain/libdragon/tools/chksum64.exe -MKDFS = $(ROOTDIR)/toolchain/libdragon/tools/mkdfs.exe -N64TOOL = $(ROOTDIR)/toolchain/libdragon/tools/n64tool.exe +ROOTDIR = $(N64_INST) +GCCN64PREFIX = $(ROOTDIR)/bin/mips64-elf- +CHKSUM64PATH = $(ROOTDIR)/bin/chksum64 +MKDFSPATH = $(ROOTDIR)/bin/mkdfs +N64TOOL = $(ROOTDIR)/bin/n64tool HEADERNAME = header.ed64 HEADERTITLE = "EverDrive OS" + +SRCDIR = ./src +INCDIR = ./inc +RESDIR = ./res +OBJDIR = ./obj +BINDIR = ./bin +TOOLSDIR = ./tools + +LINK_FLAGS = -O1 -L$(ROOTDIR)/lib -L$(ROOTDIR)/mips64-elf/lib -ldragon -lmad -lyaml -lc -lm -ldragonsys -lnosys $(LIBS) -Tn64ld.x PROG_NAME = OS64P - -INCLUDE_DIRS = -I$(ROOTDIR)/inc -I$(ROOTDIR)/include -I$(ROOTDIR)/toolchain/gcc-toolchain-mips64/include -I$(ROOTDIR)/toolchain/gcc-toolchain-mips64/mips64-elf/include -I$(ROOTDIR)/toolchain/libdragon/include - -COMMON_FLAGS = -std=gnu17 -march=vr4300 -mtune=vr4300 -Wall -Wrestrict -Wno-pointer-sign -D_REENTRANT -DUSE_TRUETYPE $(INCLUDE_DIRS) $(SET_DEBUG) -COMMON_FLAGS += -DED64PLUS -FLAGS_VT = -O0 $(COMMON_FLAGS) -FLAGS = -O2 $(COMMON_FLAGS) +CFLAGS = -std=gnu99 -march=vr4300 -mtune=vr4300 -O1 -I$(INCDIR) -I$(ROOTDIR)/include -I$(ROOTDIR)/mips64-elf/include -lpthread -lrt -D_REENTRANT -DUSE_TRUETYPE $(SET_DEBUG) ASFLAGS = -mtune=vr4300 -march=vr4300 -LINK_FLAGS = -G0 -L$(ROOTDIR)/lib -L$(ROOTDIR)/toolchain/gcc-toolchain-mips64/mips64-elf/lib -L$(ROOTDIR)/toolchain/libdragon/lib -ldragon -lmad -lyaml -lm -lc -ldragonsys -Tn64ld.x - -GCCN64PREFIX = $(ROOTDIR)/toolchain/gcc-toolchain-mips64/bin/mips64-elf- -CC = $(GCCN64PREFIX)gcc.exe -AS = $(GCCN64PREFIX)as.exe -LD = $(GCCN64PREFIX)ld.exe +CC = $(GCCN64PREFIX)gcc +AS = $(GCCN64PREFIX)as +LD = $(GCCN64PREFIX)ld OBJCOPY = $(GCCN64PREFIX)objcopy + +SOURCES := $(wildcard $(SRCDIR)/*.c) +OBJECTS = $(SOURCES:$(SRCDIR)/%.c=$(OBJDIR)/%.o) -SRC = $(wildcard $(SRCDIR)/*.c) +$(PROG_NAME).v64: $ $(PROG_NAME).elf $(PROG_NAME).dfs + $(OBJCOPY) $(BINDIR)/$(PROG_NAME).elf $(BINDIR)/$(PROG_NAME).bin -O binary + rm -f $(BINDIR)/$(PROG_NAME).v64 + $(N64TOOL) -l 4M -t $(HEADERTITLE) -h $(RESDIR)/$(HEADERNAME) -o $(BINDIR)/$(PROG_NAME).v64 $(BINDIR)/$(PROG_NAME).bin -s 1M $(BINDIR)/$(PROG_NAME).dfs + $(CHKSUM64PATH) $(BINDIR)/$(PROG_NAME).v64 -OBJ = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(SRC)) +$(PROG_NAME).elf : $(OBJECTS) + @mkdir -p $(BINDIR) + $(LD) -o $(BINDIR)/$(PROG_NAME).elf $(OBJECTS) $(LINK_FLAGS) + +$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.c + @mkdir -p $(OBJDIR) + $(CC) $(CFLAGS) -c $< -o $@ + +copy: $(PROG_NAME).v64 + sh $(TOOLSDIR)/upload.sh + +$(PROG_NAME).dfs: + $(MKDFSPATH) $(BINDIR)/$(PROG_NAME).dfs $(RESDIR)/filesystem/ all: $(PROG_NAME).v64 -release: $(PROG_NAME).v64 - -debug: SET_DEBUG=-DDEBUG debug: $(PROG_NAME).v64 -send: $(PROG_NAME).v64 - $(TOOLSDIR)/up.bat - - -$(PROG_NAME).v64: $(PROG_NAME).elf $(PROG_NAME).dfs - $(OBJCOPY) $(BINDIR)/$(PROG_NAME).elf $(BINDIR)/$(PROG_NAME).bin -O binary - $(N64TOOL) -l 4M -t $(HEADERTITLE) -h $(RESDIR)/$(HEADERNAME) -o $(BINDIR)/$(PROG_NAME).v64 $(BINDIR)/$(PROG_NAME).bin -s 1M $(BINDIR)/$(PROG_NAME).dfs - $(CHKSUM64) $(BINDIR)/$(PROG_NAME).v64 - -$(PROG_NAME).elf : $(OBJ) $(OBJS) - $(LD) -o $(BINDIR)/$(PROG_NAME).elf $(OBJ) $(OBJS) $(LINK_FLAGS) - -$(PROG_NAME).dfs: - $(MKDFS) $(BINDIR)/$(PROG_NAME).dfs $(RESDIR)/filesystem/ - -$(OBJDIR)/gscore.o: $(SRCDIR)/gscore.c - $(CC) $(FLAGS_VT) -c $(SRCDIR)/gscore.c -o $(OBJDIR)/gscore.o - -$(OBJDIR)/%.o : $(SRCDIR)/%.c - $(CC) $(FLAGS) -c $< -o $@ - -$(OBJDIR)/%.o : $(SRCDIR)/%.s - $(AS) $(ASFLAGS) $< -o $@ - +debug: SET_DEBUG=-DDEBUG clean: - $(info "Cleaning $(PROG_NAME)...") - @$(RM) $(call FIXPATH,$(BINDIR)/$(PROG_NAME).v64) - @$(RM) $(call FIXPATH,$(BINDIR)/$(PROG_NAME).bin) - @$(RM) $(call FIXPATH,$(BINDIR)/$(PROG_NAME).elf) - @$(RM) $(call FIXPATH,$(OBJ)) + rm -f $(BINDIR)/*.v64 $(BINDIR)/*.elf $(OBJDIR)/*.o $(BINDIR)/*.bin $(BINDIR)/*.dfs diff --git a/README.md b/README.md index eb710c3..3e7a6e9 100755 --- a/README.md +++ b/README.md @@ -2,57 +2,35 @@ Alternative Everdrive64 menu - -`Altra64` is an open source menu for [Everdrive64](http://krikzz.com/) and is based on a fork of alt64 which was +`Altra64` is an open source menu for [Everdrive64](http://krikzz.com/) and ed64+ and is based on a fork of alt64 which was originally written by saturnu, and released on the [Everdrive64 forum](http://krikzz.com/forum/index.php?topic=816.0). ## Building -Clone this `Altra64` repo to a directory of your choice. + +If you want to build the menu, you need an n64 toolchain. This is terrible to build, moparisthebest ended up creating a Dockerfile in the docker folder, instructions included in it. + +Or if you trust him, you can use the one he built and pushed to docker hub, [moparisthebest/altra64-dev](https://hub.docker.com/r/moparisthebest/altra64-dev) + ### Build `Altra64` -If this is the first time building, ensure you create the following folders in the root directory `bin` `obj` and `lib` -To install the dependencies run: `update-libs.ps1` -To build the ROM +To build the Rom -from the projects root directory, -On Windows 10 run +from the projects root directory, with docker installed ``` -> build +$ docker run --rm -v "$(pwd):/build" moparisthebest/altra64-dev make ``` -on linux -``` -$ make -``` -If it all worked, you will find `OS64P.V64` in the `Altra64` bin directory. - -### Debug Build `Altra64` -To build the debug version of the Rom - -from the projects root directory, -On Windows 10 run -``` -> build debug -``` -on linux -``` -$ make debug -``` -If it all worked, you will find `OS64P.V64` in the `Altra64` bin directory. +If it all worked, you will find `OS64.v64` in the `bin` directory. ### Clean `Altra64` + Finally, we can clean the build objects from the project -from the projects root directory, -On Windows 10 run +from the projects root directory ``` -> build clean -``` -on linux -``` -$ make clean +$ docker run --rm -v "$(pwd):/build" moparisthebest/altra64-dev make clean ``` Enjoy! diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100755 index 8a0dba5..0000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,68 +0,0 @@ -jobs: -- job: Windows - pool: - vmImage: 'vs2017-win2016' - - variables: - outputStorageUri: '' - outputStorageContainerSasToken: '' - binaryVersion: '$(Year:yy)$(DayOfYear)$(Rev:r)' - - steps: - - task: PowerShell@2 - inputs: - targetType: 'filePath' # Optional. Options: filePath, inline - filePath: 'update-libs.ps1' # Required when targetType == FilePath - #arguments: # Optional - #errorActionPreference: 'stop' # Optional. Options: stop, continue, silentlyContinue - failOnStderr: false # Optional - #workingDirectory: # Optional - displayName: Install tool-chain and libs - - - task: PowerShell@2 - inputs: - targetType: 'inline' - script: | - $path = "$($Env:BUILD_SOURCESDIRECTORY)\inc\version.h" - # should possibly be setting this through the make file! - $versionStr = '#define OS_BUILD_VERSION "' + $Env:Build_BuildNumber + '"' - (Get-Content $path).Replace('#define OS_BUILD_VERSION "0"',$versionStr) | Set-Content $path - errorActionPreference: 'stop' - failOnStderr: 'false' - displayName: Update build version - - - task: PowerShell@2 - inputs: - targetType: 'inline' - script: | - # needs converting to proper powershell or bash! - cmd.exe /c "set PATH=%PATH%;%BUILD_SOURCESDIRECTORY%\gcc-toolchain-mips64\bin" - cmd.exe /c "md bin" - cmd.exe /c "md obj" - If ($Env.Build_SourceBranchName -eq "master") { - cmd.exe /c "make" - } - Else { - cmd.exe /c "make debug" - } - errorActionPreference: 'stop' - failOnStderr: 'false' - displayName: 'Build ROM' - continueOnError: false - - - task: CopyFiles@2 - inputs: - sourceFolder: $(Build.SourcesDirectory) - contents: 'bin\*.v64' - targetFolder: $(Build.ArtifactStagingDirectory) - flattenFolders: true - displayName: 'Copy ROM' - continueOnError: false - - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: '$(Build.ArtifactStagingDirectory)' - artifactName: 'binaries' - publishLocation: 'Container' - displayName: Publish Build Artifacts - continueOnError: false diff --git a/bin/ejectjs.bat b/bin/ejectjs.bat deleted file mode 100755 index e45bff0..0000000 --- a/bin/ejectjs.bat +++ /dev/null @@ -1,107 +0,0 @@ - -@if (@X)==(@Y) @end /* JScript comment - @echo off - cscript //E:JScript //nologo "%~f0" %* - ::pause - exit /b %errorlevel% -@if (@X)==(@Y) @end JScript comment */ - -function printHelp(){ - - WScript.Echo( WScript.ScriptName + " - ejects a device"); - WScript.Echo(" "); - WScript.Echo(WScript.ScriptName + " {LETTER|*}"); - WScript.Echo(" * will eject all ejectable drives"); -} - -if (WScript.Arguments.Length < 1 ) { - printHelp(); - WScript.Quit(0); -} - -if (WScript.Arguments.Item(0).length>1) { - WScript.Echo("You need to pass an a drive letter or *"); - WScript.Quit(1); -} - - -var ShellObj=new ActiveXObject("Shell.Application"); -var myComputer=ShellObj.NameSpace(17);//https://docs.microsoft.com/en-us/windows/win32/api/shldisp/ne-shldisp-shellspecialfolderconstants -var myComputerItems = myComputer.Items(); - -var usbType="USB Drive"; -var cdType="CD Drive"; - -var usbVerbFB=6; -var cdVerbFB=4; - -var toEject=WScript.Arguments.Item(0); - - -function callVerbFromBottom(item,indexFromBottom){ - var itemVerbs=item.Verbs(); - var verb=itemVerbs.Item(itemVerbs.Count-indexFromBottom); - verb.DoIt(); - item.InvokeVerb(verb.Name.replace("&","")); -} - -function ejectAll(){ - for (var i=0;i> /etc/environment +# echo 'export N64_INST=/usr/local/libdragon' >> ~/.bashrc +export N64_INST=/usr/local/libdragon +# source ~/.bashrc + +# Pull the latest libdragon source code and make a build directory +git clone https://github.com/dragonminded/libdragon.git +# set to correct commit +cd libdragon && git checkout b26fce6 && cd .. + +# fix issues with the build scripts +sed -i -- 's|${N64_INST:-/usr/local}|/usr/local/libdragon|g' libdragon/tools/build +sed -i -- 's|--with-newlib|--with-newlib --with-system-zlib|g' libdragon/tools/build + +sed -i -- 's| -lpng|\nLDLIBS = -lpng|g' libdragon/tools/mksprite/Makefile +sed -i -- 's| -Werror| -w|g' libdragon/tools/mksprite/Makefile + +# make a build folder for libdragon +mkdir libdragon/build_gcc +cp libdragon/tools/build libdragon/build_gcc + +# run the build script (this will take a while! and if not sudo, will ask for password mid flow!) +cd libdragon/build_gcc +./build + +cd .. +# run the install script [sudo req] +make +make install +make tools +make tools-install + +cd .. +# install libmikmod (custom version) +git clone https://github.com/n64-tools/libmikmod +cd libmikmod/n64 +make +make install +cd .. # we have are in a subfolder, this is not a duplicate... + +cd .. +# install libyaml +git clone https://github.com/yaml/libyaml +cd libyaml +./bootstrap +#$(N64_INST) converterd to $N64_INST below otherwise it will not run on WSFL +export PATH=$PATH:$N64_INST/bin +CFLAGS="-std=gnu99 -march=vr4300 -mtune=vr4300" \ +LDFLAGS="-L$N64_INST/lib -Tn64ld.x" \ +LIBS="-ldragon -lc -ldragonsys -lnosys" \ +./configure --host=mips64-elf --prefix=$N64_INST +make +make install + +cd .. +# install libmad (custom version) +git clone https://github.com/n64-tools/libmad +cd libmad +export PATH=$PATH:$N64_INST/bin +CFLAGS="-std=gnu99 -march=vr4300 -mtune=vr4300" \ +LDFLAGS="-L$N64_INST/lib -Tn64ld.x" \ +LIBS="-ldragon -lc -ldragonsys -lnosys" \ +./configure --host=mips64-elf --prefix=$N64_INST +make +make install + +cd .. + +# Perform cleanup +apt-get -y autoremove +apt-get autoclean + +echo 'export N64_INST=/usr/local/libdragon' >> ~/.bashrc +echo 'export PATH="$PATH:$N64_INST/bin"' >> ~/.bashrc + diff --git a/inc/menu.h b/inc/menu.h index ab6798b..4ac1123 100755 --- a/inc/menu.h +++ b/inc/menu.h @@ -11,6 +11,5 @@ extern int text_offset; void printText(char *msg, int x, int y, display_context_t dcon); void menu_about(display_context_t disp); -void menu_controls(display_context_t disp); #endif diff --git a/n64ld.x b/n64ld.x deleted file mode 100755 index 824afc7..0000000 --- a/n64ld.x +++ /dev/null @@ -1,113 +0,0 @@ -/* ======================================================================== - * - * n64ld.x - * - * GNU Linker script for building an image that is set up for the N64 - * but still has the data factored into sections. It is not directly - * runnable, and it contains the debug info if available. It will need - * a 'loader' to perform the final stage of transformation to produce - * a raw image. - * - * Copyright (c) 1999 Ground Zero Development, All rights reserved. - * Developed by Frank Somers - * Modifications by hcs (halleyscometsoftware@hotmail.com) - * - * $Header: /cvsroot/n64dev/n64dev/lib/alt-libn64/n64ld.x,v 1.2 2006/08/11 15:54:11 halleyscometsw Exp $ - * - * ======================================================================== - */ - -OUTPUT_FORMAT ("elf32-bigmips", "elf32-bigmips", "elf32-littlemips") -OUTPUT_ARCH (mips) -EXTERN (_start) -ENTRY (_start) - -MEMORY -{ - mem : ORIGIN = 0x80000400, LENGTH = 4M-0x0400 -} - -SECTIONS { - /* Start address of code is 1K up in uncached, unmapped RAM. We have - * to be at least this far up in order to not interfere with the cart - * boot code which is copying it down from the cart - */ - - . = 0x80000400 ; - - /* The text section carries the app code and its relocation addr is - * the first byte of the cart domain in cached, unmapped memory - */ - - .text : { - FILL (0) - - *(.boot) - . = ALIGN(16); - __text_start = . ; - *(.text) - *(.text.*) - *(.ctors) - *(.dtors) - *(.rodata) - *(.rodata.*) - *(.init) - *(.fini) - __text_end = . ; - } > mem - - - /* Data section has relocation address at start of RAM in cached, - * unmapped memory, but is loaded just at the end of the text segment, - * and must be copied to the correct location at startup - */ - - .data : { - /* Gather all initialised data together. The memory layout - * will place the global initialised data at the lowest addrs. - * The lit8, lit4, sdata and sbss sections have to be placed - * together in that order from low to high addrs with the _gp symbol - * positioned (aligned) at the start of the sdata section. - * We then finish off with the standard bss section - */ - - FILL (0xaa) - - . = ALIGN(16); - __data_start = . ; - *(.data) - *(.data.*) - *(.lit8) - *(.lit4) ; - /* _gp = ALIGN(16) + 0x7ff0 ;*/ -/* _gp = . + 0x7ff0; */ - . = ALIGN(16); - _gp = . + 0x8000; - *(.sdata) - *(.sdata.*) - __data_end = . ; -/* - __bss_start = . ; - *(.scommon) - *(.sbss) - *(COMMON) - *(.bss) - /* XXX Force 8-byte end alignment and update startup code * / - - __bss_end = . ; -*/ - } > mem - - .bss (NOLOAD) : { - __bss_start = . ; - *(.scommon) - *(.sbss) - *(.sbss.*) - *(COMMON) - *(.bss) - *(.bss.*) - __bss_end = . ; - end = . ; - } > mem - -} diff --git a/res/ALT64.INI b/res/ALT64.INI index 9507897..9cf6220 100755 --- a/res/ALT64.INI +++ b/res/ALT64.INI @@ -15,9 +15,9 @@ scroll_behaviour=0 ; 0=page-system 1=classic quick_boot=1 ; 'START' boots last rom sound_on=1 ; sounds 1=on 0=off page_display=1 ; display page -tv_mode=0 ; 1=ntsc 2=pal 3=mpal 0=force_off -enable_colored_list=1 ; 1=enable 0=disable -ext_type=1 ; 0=classic 1=OS64 +tv_mode=2 ; 1=ntsc 2=pal 3=mpal 0=force_off +enable_colored_list=1 ; 1=enable 0=disalbe +ext_type=0 ; 0=classic 1=OS64 sd_speed=2 ; 1=25MHz 2=50MHz background_image=background.png ; backgrund png image 320x240 32bit hide_sysfolder=1 ; 1=hide 0=don't hide @@ -27,3 +27,6 @@ save_path=SDSAVE ; save directory inside ED64 [user] name = Altra64 ; Username +[gblite] +save_path=/ED64/SDSAVE/ ; save directory surround with slashes +tv_mode=0 ; 1=ntsc 2=pal 3=mpal 0=force_off diff --git a/src/image.c b/src/image.c index d56c314..3d7897c 100755 --- a/src/image.c +++ b/src/image.c @@ -173,7 +173,7 @@ void drawImage(display_context_t dcon, sprite_t *sprite) { for (int i=0; ihslices; i++) { rdp_sync(SYNC_PIPE); rdp_load_texture_stride(0, 0, MIRROR_DISABLED, sprite, j*sprite->hslices + i); - rdp_draw_sprite(0, x, y, 0); + rdp_draw_sprite(0, x, y); x += 32; } y += 16; diff --git a/src/main.c b/src/main.c index 035ab96..367dff7 100755 --- a/src/main.c +++ b/src/main.c @@ -50,7 +50,6 @@ #include "cic.h" #define ED64PLUS -#define USE_TRUETYPE #ifdef ED64PLUS #define ED64_FIRMWARE_PATH "ED64P" @@ -170,7 +169,6 @@ enum InputMap mpk_quick_backup, mp3, abort_screen, - control_screen, }; enum InputMap input_mapping = file_manager; @@ -706,7 +704,7 @@ void drawBoxNumber(display_context_t disp, int box) break; //info screen case 9: box_color = graphics_make_color(0x00, 0x00, 0x00, 0xB6); - drawBox(28, 20, 260, 200, disp); + drawBox(28, 49, 260, 150, disp); break; //yellow toplist case 10: box_color = graphics_make_color(0x00, 0x60, 0x00, 0xC3); @@ -1626,20 +1624,39 @@ int backupSaveData(display_context_t disp) int saveTypeFromSd(display_context_t disp, char *rom_name, int stype) { TRACE(disp, rom_filename); - TCHAR fname[256] = {0}; - sprintf(fname, "/"ED64_FIRMWARE_PATH"/%s/%s.%s", save_path, rom_name, saveTypeToExtension(stype, ext_type)); - TCHAR fname1[50] = {0}; - sprintf(fname1, "/"ED64_FIRMWARE_PATH"/%s/", save_path); - printText(fname1, 3, -1, disp); - TCHAR fname2[50] = {0}; - sprintf(fname2, "%s.%s", rom_name, saveTypeToExtension(stype, ext_type)); - printText(fname2, 3, -1, disp); + const char* save_type_extension = saveTypeToExtension(stype, ext_type); + TCHAR fname[256] = {0}; + int save_count = 0; //TODO: once this crosses 9999 bad infinite-loop type things happen, look into that one day + FRESULT result; + FILINFO fnoba; + printText("Finding latest save slot...", 3, -1, disp); + display_show(disp); + while (true) { + sprintf(fname, "/"ED64_FIRMWARE_PATH"/%s/%s.%04x.%s", save_path, rom_name, save_count, save_type_extension); + result = f_stat (fname, &fnoba); + if (result != FR_OK) { + // we found our first missing save slot, break + break; + } + ++save_count; + } + if (save_count > 0) { + // we've went 1 past the end, so back up + sprintf(fname, "Found latest save slot: %04x", --save_count); + printText(fname, 3, -1, disp); + sprintf(fname, "/"ED64_FIRMWARE_PATH"/%s/%s.%04x.%s", save_path, rom_name, save_count, save_type_extension); + } else { + // not even a 0000 was found, so look at the original name before numbering was implemented + printText("No save slot found!", 3, -1, disp); + printText("Looking for non-numbered file...", 3, -1, disp); + sprintf(fname, "/"ED64_FIRMWARE_PATH"/%s/%s.%s", save_path, rom_name, save_type_extension); + } + display_show(disp); int size = saveTypeToSize(stype); // int byte uint8_t cartsave_data[size]; - FRESULT result; FIL file; UINT bytesread; result = f_open(&file, fname, FA_READ); @@ -1710,14 +1727,30 @@ int saveTypeFromSd(display_context_t disp, char *rom_name, int stype) int saveTypeToSd(display_context_t disp, char *rom_name, int stype) { //after reset create new savefile + const char* save_type_extension = saveTypeToExtension(stype, ext_type); TCHAR fname[256]; //TODO: change filename buffers to 256!!! - - sprintf(fname, "/"ED64_FIRMWARE_PATH"/%s/%s.%s", save_path, rom_name, saveTypeToExtension(stype, ext_type)); + int save_count = 0; //TODO: once this crosses 9999 bad infinite-loop type things happen, look into that one day + FRESULT result; + FILINFO fnoba; + printText("Finding unused save slot...", 3, -1, disp); + display_show(disp); + while (true) { + sprintf(fname, "/"ED64_FIRMWARE_PATH"/%s/%s.%04x.%s", save_path, rom_name, save_count, save_type_extension); + result = f_stat (fname, &fnoba); + if (result != FR_OK) { + // we found our first missing save slot, break + break; + } + ++save_count; + } + sprintf(fname, "Found unused save slot: %04x", save_count); + printText(fname, 3, -1, disp); + display_show(disp); + sprintf(fname, "/"ED64_FIRMWARE_PATH"/%s/%s.%04x.%s", save_path, rom_name, save_count, save_type_extension); int size = saveTypeToSize(stype); // int byte TRACEF(disp, "size for save=%i", size); - FRESULT result; FIL file; UINT bytesread; result = f_open(&file, fname, FA_WRITE | FA_OPEN_ALWAYS); //Could use FA_CREATE_ALWAYS but this could lead to the posibility of the file being emptied @@ -1756,6 +1789,7 @@ int saveTypeToSd(display_context_t disp, char *rom_name, int stype) else { TRACE(disp, "COULDNT CREATE FILE :-("); + printText("Error saving game to SD, couldn't create file!", 3, -1, disp); } } @@ -3051,21 +3085,6 @@ void showAboutScreen(display_context_t disp) menu_about(disp); } -void showControlScreen(display_context_t disp) -{ - while (!(disp = display_lock())) - ; - new_scroll_pos(&cursor, &page, MAX_LIST, count); - clearScreen(disp); //part clear? - display_dir(list, cursor, page, MAX_LIST, count, disp); - drawBoxNumber(disp, 9); - display_show(disp); - - if (sound_on) - playSound(2); - - menu_controls(disp); -} void loadFile(display_context_t disp) { @@ -4069,7 +4088,7 @@ void handleInput(display_context_t disp, sprite_t *contr) { case file_manager: showAboutScreen(disp); - input_mapping = control_screen; + input_mapping = none; break; case mempak_menu: @@ -4087,11 +4106,6 @@ void handleInput(display_context_t disp, sprite_t *contr) input_mapping = abort_screen; break; - case control_screen: - showControlScreen(disp); - input_mapping = none; - break; - default: break; } diff --git a/src/menu_about.c b/src/menu_about.c index db3da40..f986990 100755 --- a/src/menu_about.c +++ b/src/menu_about.c @@ -28,31 +28,7 @@ void menu_about(display_context_t disp) printText("Richard Weick", 9, -1, disp); printText("ChillyWilly", 9, -1, disp); printText("ShaunTaylor", 9, -1, disp); - printText("Conle Z: Page 2", 9, -1, disp); + printText("Conle", 9, -1, disp); + printText("Aria Hiro64", 9, -1, disp); + printText("moparisthebest", 9, -1, disp); } //TODO: make scrolling text, should include libraries used. -void menu_controls(display_context_t disp) -{ - printText(" - Controls -", 4, 4, disp); - printText(" ", 4, -1, disp); - printText(" L: brings up the mempak", 4, -1, disp); - printText(" menu", 5, -1, disp); - printText(" ", 4, -1, disp); - printText(" Z: about screen", 4, -1, disp); - printText(" ", 4, -1, disp); - printText(" A: start rom/directory", 4, -1, disp); - printText(" mempak", 4, -1, disp); - printText(" ", 4, -1, disp); - printText(" B: back/cancel", 4, -1, disp); - printText(" ", 4, -1, disp); - printText(" START: start last rom", 4, -1, disp); - printText(" ", 4, -1, disp); - printText(" C-left: rom info/mempak", 4, -1, disp); - printText(" content view", 4, -1, disp); - printText(" ", 4, -1, disp); - printText("C-right: rom config creen", 4, -1, disp); - printText(" ", 4, -1, disp); - printText(" C-up: view full filename", 4, -1, disp); - printText(" ", 4, -1, disp); - printText(" C-down: Toplist 15", 4, -1, disp); - -} \ No newline at end of file diff --git a/src/sound.c b/src/sound.c index ce0832c..245470c 100755 --- a/src/sound.c +++ b/src/sound.c @@ -7,27 +7,22 @@ void sndInit(void) { - return 0; } void sndPlayBGM(char* filename) { - return 0; } void sndStopAll(void) { - return 0; } void sndPlaySFX(char* filename) { - return 0; } void sndUpdate(void) { - return 0; } #else diff --git a/tools/deploy-sd.sh b/tools/deploy-sd.sh index 2473238..a34220d 100755 --- a/tools/deploy-sd.sh +++ b/tools/deploy-sd.sh @@ -6,13 +6,13 @@ #! /bin/bash sudo mount /dev/sdb1 /mnt -file=/mnt/ED64P/OS64P.V64 +file=/mnt/ED64/OS64.v64 if [ -e $file ] then echo -e "File $file exists - mount ok" echo -e "copy..." - sudo cp ../bin/OS64P.V64 /mnt/ED64P/ - sudo cp ../res/ALT64.INI /mnt/ED64P/ + sudo cp ../bin/OS64.v64 /mnt/ED64/ + sudo cp ../res/ALT64.INI /mnt/ED64/ echo -e "umounting..." sudo umount /mnt echo -e "done..." diff --git a/tools/extract-firmware.cmd b/tools/extract-firmware.cmd index 57a0712..f1cf66b 100755 --- a/tools/extract-firmware.cmd +++ b/tools/extract-firmware.cmd @@ -52,7 +52,7 @@ MKDIR "%fs%" SET "rom=%1" IF %1.==. ( -SET /P rom="Please enter full path to OS64P.V64 V2.12:" +SET /P rom="Please enter full path to OS64.v64 V2.12:" ) set "drive=%rom:~0,1%" @@ -98,7 +98,7 @@ echo "Linux rom dir is %rom%" @echo ON -:: OS64P.V64 - Version 2.12 firmware offsets: +:: OS64.V64 - Version 2.12 firmware offsets: :: cart offset (hex) offset (dec) length :: v2_old 0x25070 151664 61552 :: v2 0x15930 88368 63276 diff --git a/update-libs.ps1 b/update-libs.ps1 deleted file mode 100755 index 4e3dbb7..0000000 --- a/update-libs.ps1 +++ /dev/null @@ -1,36 +0,0 @@ -New-Item -ItemType Directory -Force -Path "$PSScriptRoot\temp\" - -$url = "https://n64tools.blob.core.windows.net/binaries/N64-tools/libdragon/develop/latest/libdragon-win64.zip" -$output = "$PSScriptRoot\temp\libdragon.zip" - -Invoke-WebRequest -Uri $url -OutFile $output -Expand-Archive -Force -Path $output -DestinationPath "$PSScriptRoot\toolchain\libdragon\" - -$url = "https://n64tools.blob.core.windows.net/binaries/N64-tools/mips64-gcc-toolchain/master/latest/gcc-toolchain-mips64-win64.zip" -$output = "$PSScriptRoot\temp\gcc-toolchain-mips64.zip" - -Invoke-WebRequest -Uri $url -OutFile $output -Expand-Archive -Force -Path $output -DestinationPath "$PSScriptRoot\toolchain\gcc-toolchain-mips64\" - -$url = "https://n64tools.blob.core.windows.net/binaries/N64-tools/libs/n64/latest/libmikmod.zip" -$output = "$PSScriptRoot\temp\libmikmod.zip" - -Invoke-WebRequest -Uri $url -OutFile $output -Expand-Archive -Path $output -DestinationPath "$PSScriptRoot" - - -$url = "https://n64tools.blob.core.windows.net/binaries/N64-tools/libs/n64/latest/libmad.zip" -$output = "$PSScriptRoot\temp\libmad.zip" - -Invoke-WebRequest -Uri $url -OutFile $output -Expand-Archive -Path $output -DestinationPath "$PSScriptRoot" - - -$url = "https://n64tools.blob.core.windows.net/binaries/N64-tools/libs/n64/latest/libyaml.zip" -$output = "$PSScriptRoot\temp\libyaml.zip" - -Invoke-WebRequest -Uri $url -OutFile $output -Expand-Archive -Path $output -DestinationPath "$PSScriptRoot" - - -Remove-Item -LiteralPath "$PSScriptRoot\temp\" -Force -Recurse