add moparisthebes's improvements and build with docker

This commit is contained in:
ariahiro64 2021-09-25 19:28:42 -04:00
parent d407f1650b
commit 485227f479
18 changed files with 255 additions and 515 deletions

7
.gitignore vendored
View File

@ -17,10 +17,3 @@
*properties.json *properties.json
/.vs /.vs
/.vscode /.vscode
/toolchain/*
/lib/*
/include/*
/temp
*.zip
toolchain/

108
Makefile
View File

@ -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. # See LICENSE file in the project root for full license information.
# #
ifdef SystemRoot ROOTDIR = $(N64_INST)
FIXPATH = $(subst /,\,$1) GCCN64PREFIX = $(ROOTDIR)/bin/mips64-elf-
RM = DEL /Q CHKSUM64PATH = $(ROOTDIR)/bin/chksum64
else MKDFSPATH = $(ROOTDIR)/bin/mkdfs
FIXPATH = $1 N64TOOL = $(ROOTDIR)/bin/n64tool
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
HEADERNAME = header.ed64 HEADERNAME = header.ed64
HEADERTITLE = "EverDrive OS" 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 PROG_NAME = OS64P
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)
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)
ASFLAGS = -mtune=vr4300 -march=vr4300 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 CC = $(GCCN64PREFIX)gcc
AS = $(GCCN64PREFIX)as
GCCN64PREFIX = $(ROOTDIR)/toolchain/gcc-toolchain-mips64/bin/mips64-elf- LD = $(GCCN64PREFIX)ld
CC = $(GCCN64PREFIX)gcc.exe
AS = $(GCCN64PREFIX)as.exe
LD = $(GCCN64PREFIX)ld.exe
OBJCOPY = $(GCCN64PREFIX)objcopy 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 all: $(PROG_NAME).v64
release: $(PROG_NAME).v64
debug: SET_DEBUG=-DDEBUG
debug: $(PROG_NAME).v64 debug: $(PROG_NAME).v64
send: $(PROG_NAME).v64 debug: SET_DEBUG=-DDEBUG
$(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 $@
clean: clean:
$(info "Cleaning $(PROG_NAME)...") rm -f $(BINDIR)/*.v64 $(BINDIR)/*.elf $(OBJDIR)/*.o $(BINDIR)/*.bin $(BINDIR)/*.dfs
@$(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))

View File

@ -2,57 +2,35 @@
Alternative Everdrive64 menu Alternative Everdrive64 menu
`Altra64` is an open source menu for [Everdrive64](http://krikzz.com/) and ed64+ and is based on a fork of alt64 which was
`Altra64` is an open source menu for [Everdrive64](http://krikzz.com/) and is based on a fork of alt64 which was
originally written by saturnu, and released on the originally written by saturnu, and released on the
[Everdrive64 forum](http://krikzz.com/forum/index.php?topic=816.0). [Everdrive64 forum](http://krikzz.com/forum/index.php?topic=816.0).
## Building ## 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` ### 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, from the projects root directory, with docker installed
On Windows 10 run
``` ```
> build $ docker run --rm -v "$(pwd):/build" moparisthebest/altra64-dev make
``` ```
on linux If it all worked, you will find `OS64.v64` in the `bin` directory.
```
$ 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.
### Clean `Altra64` ### Clean `Altra64`
Finally, we can clean the build objects from the project Finally, we can clean the build objects from the project
from the projects root directory, from the projects root directory
On Windows 10 run
``` ```
> build clean $ docker run --rm -v "$(pwd):/build" moparisthebest/altra64-dev make clean
```
on linux
```
$ make clean
``` ```
Enjoy! Enjoy!

View File

@ -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

View File

@ -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<myComputerItems.Count;i++){
var item=myComputerItems.Item(i);
var itemType=myComputer.GetDetailsOf(myComputerItems.Item(i),1);
var itemName=myComputer.GetDetailsOf(myComputerItems.Item(i),0);
if(itemType===usbType){
callVerbFromBottom(item,usbVerbFB);
}
if(itemType===cdType){
callVerbFromBottom(item,cdVerbFB);
}
}
}
function ejectByLetter(letter) {
var driveFound=false;
for (var i=0;i<myComputerItems.Count;i++){
var item=myComputerItems.Item(i);
var itemType=myComputer.GetDetailsOf(myComputerItems.Item(i),1);
var itemName=myComputer.GetDetailsOf(myComputerItems.Item(i),0);
if(
itemName.indexOf(":") !== -1 &&
itemName.indexOf("(") !== -1 &&
itemName.indexOf(")") !== -1
) {
//the item is a some kind of drive
var itemDriveLetter=itemName.substring(
itemName.indexOf(")") - 1 ,
itemName.indexOf(")") - 2
);
if(itemDriveLetter.toUpperCase()===letter.toUpperCase()) {
if(itemType===usbType) {
callVerbFromBottom(item,usbVerbFB);
} else if (itemType===cdType) {
callVerbFromBottom(item,cdVerbFB);
} else {
WScript.Echo("Drive "+ letter + " does not support ejectuation");
WScript.Quit(2);
}
driveFound=true;
break; //drive letter has been found , no more iteration needed.
}
}
}
if(!driveFound){
WScript.Echo("Drive " + letter +" has not been found");
WScript.Quit(3);
}
}
if(toEject==="*") {
ejectAll();
} else {
ejectByLetter(toEject);
}

View File

@ -1,12 +1,23 @@
set PATH=%~dp0toolchain\gcc-toolchain-mips64\bin ::
:: Copyright (c) 2017 The Altra64 project contributors
:: See LICENSE file in the project root for full license information.
::
@echo off @echo off
set "SystemPath=%SystemRoot%\\System32"
IF EXIST %WINDIR%\\sysnative\\reg.exe (
set "SystemPath=%SystemRoot%\Sysnative"
echo. "32-bit process..."
)
set env="/usr/local/libdragon"
IF %1.==. ( IF %1.==. (
::echo. "no parameter" echo. "no parameter"
make %SystemPath%\\bash --verbose -c "export N64_INST=%env%; make"
) ELSE ( ) ELSE (
::echo. "parameter: %1" echo. "parameter: %1"
make -d %1 %SystemPath%\\bash --verbose -c "export N64_INST=%env%; make %1"
) )
:pause :pause

25
docker/Dockerfile Normal file
View File

@ -0,0 +1,25 @@
# to build and test:
# docker build -t altra64-dev . && docker run --rm -v "$(pwd):/build" -it altra64-dev
# to use to compile altra64 (or other n64 stuff I guess)
# docker run --rm -v "$(pwd):/build" altra64-dev make
#FROM ubuntu:18.04
FROM ubuntu:16.04
RUN mkdir /build
COPY setup-linux.sh /usr/bin/setup-linux.sh
# run it then delete all build artifacts
RUN /usr/bin/setup-linux.sh && rm -rf /root/*
ENV N64_INST=/usr/local/libdragon
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/libdragon/bin
VOLUME [ "/build" ]
WORKDIR /build
CMD ["bash"]

94
docker/setup-linux.sh Normal file
View File

@ -0,0 +1,94 @@
#!/bin/bash
#
# Copyright (c) 2017 The Altra64 project contributors
# See LICENSE file in the project root for full license information.
#
set -euxo pipefail
# Download and install latest updates for the system [sudo req.]
apt-get update
apt-get -y upgrade
# Install essential packages [sudo req.]
apt-get -y install wget build-essential git texinfo libc6 libgmp-dev libmpfr-dev libmpc-dev libpng-dev zlib1g-dev libtool autoconf
# change to the users root directory
cd ~/
# add a system variable and make it perminent
# echo 'N64_INST=/usr/local/libdragon' >> /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

View File

@ -11,6 +11,5 @@ extern int text_offset;
void printText(char *msg, int x, int y, display_context_t dcon); void printText(char *msg, int x, int y, display_context_t dcon);
void menu_about(display_context_t disp); void menu_about(display_context_t disp);
void menu_controls(display_context_t disp);
#endif #endif

113
n64ld.x
View File

@ -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 <frank@g0dev.com>
* 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
}

View File

@ -15,9 +15,9 @@ scroll_behaviour=0 ; 0=page-system 1=classic
quick_boot=1 ; 'START' boots last rom quick_boot=1 ; 'START' boots last rom
sound_on=1 ; sounds 1=on 0=off sound_on=1 ; sounds 1=on 0=off
page_display=1 ; display page page_display=1 ; display page
tv_mode=0 ; 1=ntsc 2=pal 3=mpal 0=force_off tv_mode=2 ; 1=ntsc 2=pal 3=mpal 0=force_off
enable_colored_list=1 ; 1=enable 0=disable enable_colored_list=1 ; 1=enable 0=disalbe
ext_type=1 ; 0=classic 1=OS64 ext_type=0 ; 0=classic 1=OS64
sd_speed=2 ; 1=25MHz 2=50MHz sd_speed=2 ; 1=25MHz 2=50MHz
background_image=background.png ; backgrund png image 320x240 32bit background_image=background.png ; backgrund png image 320x240 32bit
hide_sysfolder=1 ; 1=hide 0=don't hide hide_sysfolder=1 ; 1=hide 0=don't hide
@ -27,3 +27,6 @@ save_path=SDSAVE ; save directory inside ED64
[user] [user]
name = Altra64 ; Username 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

View File

@ -173,7 +173,7 @@ void drawImage(display_context_t dcon, sprite_t *sprite) {
for (int i=0; i<sprite->hslices; i++) { for (int i=0; i<sprite->hslices; i++) {
rdp_sync(SYNC_PIPE); rdp_sync(SYNC_PIPE);
rdp_load_texture_stride(0, 0, MIRROR_DISABLED, sprite, j*sprite->hslices + i); 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; x += 32;
} }
y += 16; y += 16;

View File

@ -50,7 +50,6 @@
#include "cic.h" #include "cic.h"
#define ED64PLUS #define ED64PLUS
#define USE_TRUETYPE
#ifdef ED64PLUS #ifdef ED64PLUS
#define ED64_FIRMWARE_PATH "ED64P" #define ED64_FIRMWARE_PATH "ED64P"
@ -170,7 +169,6 @@ enum InputMap
mpk_quick_backup, mpk_quick_backup,
mp3, mp3,
abort_screen, abort_screen,
control_screen,
}; };
enum InputMap input_mapping = file_manager; enum InputMap input_mapping = file_manager;
@ -706,7 +704,7 @@ void drawBoxNumber(display_context_t disp, int box)
break; //info screen break; //info screen
case 9: case 9:
box_color = graphics_make_color(0x00, 0x00, 0x00, 0xB6); box_color = graphics_make_color(0x00, 0x00, 0x00, 0xB6);
drawBox(28, 20, 260, 200, disp); drawBox(28, 49, 260, 150, disp);
break; //yellow toplist break; //yellow toplist
case 10: case 10:
box_color = graphics_make_color(0x00, 0x60, 0x00, 0xC3); 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) int saveTypeFromSd(display_context_t disp, char *rom_name, int stype)
{ {
TRACE(disp, rom_filename); 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}; const char* save_type_extension = saveTypeToExtension(stype, ext_type);
sprintf(fname1, "/"ED64_FIRMWARE_PATH"/%s/", save_path); TCHAR fname[256] = {0};
printText(fname1, 3, -1, disp); int save_count = 0; //TODO: once this crosses 9999 bad infinite-loop type things happen, look into that one day
TCHAR fname2[50] = {0}; FRESULT result;
sprintf(fname2, "%s.%s", rom_name, saveTypeToExtension(stype, ext_type)); FILINFO fnoba;
printText(fname2, 3, -1, disp); 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 int size = saveTypeToSize(stype); // int byte
uint8_t cartsave_data[size]; uint8_t cartsave_data[size];
FRESULT result;
FIL file; FIL file;
UINT bytesread; UINT bytesread;
result = f_open(&file, fname, FA_READ); 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) int saveTypeToSd(display_context_t disp, char *rom_name, int stype)
{ {
//after reset create new savefile //after reset create new savefile
const char* save_type_extension = saveTypeToExtension(stype, ext_type);
TCHAR fname[256]; //TODO: change filename buffers to 256!!! TCHAR fname[256]; //TODO: change filename buffers to 256!!!
int save_count = 0; //TODO: once this crosses 9999 bad infinite-loop type things happen, look into that one day
sprintf(fname, "/"ED64_FIRMWARE_PATH"/%s/%s.%s", save_path, rom_name, saveTypeToExtension(stype, ext_type)); 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 int size = saveTypeToSize(stype); // int byte
TRACEF(disp, "size for save=%i", size); TRACEF(disp, "size for save=%i", size);
FRESULT result;
FIL file; FIL file;
UINT bytesread; 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 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 else
{ {
TRACE(disp, "COULDNT CREATE FILE :-("); 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); 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) void loadFile(display_context_t disp)
{ {
@ -4069,7 +4088,7 @@ void handleInput(display_context_t disp, sprite_t *contr)
{ {
case file_manager: case file_manager:
showAboutScreen(disp); showAboutScreen(disp);
input_mapping = control_screen; input_mapping = none;
break; break;
case mempak_menu: case mempak_menu:
@ -4087,11 +4106,6 @@ void handleInput(display_context_t disp, sprite_t *contr)
input_mapping = abort_screen; input_mapping = abort_screen;
break; break;
case control_screen:
showControlScreen(disp);
input_mapping = none;
break;
default: default:
break; break;
} }

View File

@ -28,31 +28,7 @@ void menu_about(display_context_t disp)
printText("Richard Weick", 9, -1, disp); printText("Richard Weick", 9, -1, disp);
printText("ChillyWilly", 9, -1, disp); printText("ChillyWilly", 9, -1, disp);
printText("ShaunTaylor", 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. } //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);
}

View File

@ -7,27 +7,22 @@
void sndInit(void) void sndInit(void)
{ {
return 0;
} }
void sndPlayBGM(char* filename) void sndPlayBGM(char* filename)
{ {
return 0;
} }
void sndStopAll(void) void sndStopAll(void)
{ {
return 0;
} }
void sndPlaySFX(char* filename) void sndPlaySFX(char* filename)
{ {
return 0;
} }
void sndUpdate(void) void sndUpdate(void)
{ {
return 0;
} }
#else #else

View File

@ -6,13 +6,13 @@
#! /bin/bash #! /bin/bash
sudo mount /dev/sdb1 /mnt sudo mount /dev/sdb1 /mnt
file=/mnt/ED64P/OS64P.V64 file=/mnt/ED64/OS64.v64
if [ -e $file ] if [ -e $file ]
then then
echo -e "File $file exists - mount ok" echo -e "File $file exists - mount ok"
echo -e "copy..." echo -e "copy..."
sudo cp ../bin/OS64P.V64 /mnt/ED64P/ sudo cp ../bin/OS64.v64 /mnt/ED64/
sudo cp ../res/ALT64.INI /mnt/ED64P/ sudo cp ../res/ALT64.INI /mnt/ED64/
echo -e "umounting..." echo -e "umounting..."
sudo umount /mnt sudo umount /mnt
echo -e "done..." echo -e "done..."

View File

@ -52,7 +52,7 @@ MKDIR "%fs%"
SET "rom=%1" SET "rom=%1"
IF %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%" set "drive=%rom:~0,1%"
@ -98,7 +98,7 @@ echo "Linux rom dir is %rom%"
@echo ON @echo ON
:: OS64P.V64 - Version 2.12 firmware offsets: :: OS64.V64 - Version 2.12 firmware offsets:
:: cart offset (hex) offset (dec) length :: cart offset (hex) offset (dec) length
:: v2_old 0x25070 151664 61552 :: v2_old 0x25070 151664 61552
:: v2 0x15930 88368 63276 :: v2 0x15930 88368 63276

View File

@ -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