From f3e1503dcc0085a036adbcd6c8275df593427569 Mon Sep 17 00:00:00 2001 From: mariohackandglitch Date: Thu, 26 Jul 2018 23:23:28 +0200 Subject: [PATCH] Initial commit. --- .gitignore | 254 ++++++++ .gitmodules | 3 + HBDummy.sln | 28 + HBDummy.vcxproj | 179 +++++ HBDummy.vcxproj.filters | 153 +++++ Makefile | 91 +++ buildtools/.buildconfig | 10 + buildtools/3ds/logo.bcma.lz | Bin 0 -> 8192 bytes buildtools/3ds/servefiles.py | 92 +++ buildtools/3ds/template.rsf | 286 ++++++++ buildtools/README.md | 13 + buildtools/make_base | 761 ++++++++++++++++++++++ buildtools/wiiu/meta_template.xml | 9 + images/bottom.pdn | Bin 0 -> 58321 bytes images/top.pdn | Bin 0 -> 91726 bytes resources/audio.cwav | Bin 0 -> 57560 bytes resources/banner.cgfx | Bin 0 -> 170880 bytes resources/icon.png | Bin 0 -> 3007 bytes resources/logo.bcma.lz | Bin 0 -> 8192 bytes romfs/bottom.png | Bin 0 -> 22786 bytes romfs/top.png | Bin 0 -> 44292 bytes source/allocator/newlibHeap.c | 35 + source/allocator/newlibHeap.h | 18 + source/clock.c | 26 + source/clock.h | 6 + source/draw.c | 375 +++++++++++ source/draw.h | 112 ++++ source/drawableObject.c | 53 ++ source/drawableObject.h | 39 ++ source/graphics.c | 72 ++ source/graphics.h | 23 + source/json/LICENSE | 26 + source/json/json.c | 1011 +++++++++++++++++++++++++++++ source/json/json.h | 283 ++++++++ source/main.c | 45 ++ source/main.h | 13 + source/png.c | 165 +++++ source/vshader.v.pica | 38 ++ 38 files changed, 4219 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 HBDummy.sln create mode 100644 HBDummy.vcxproj create mode 100644 HBDummy.vcxproj.filters create mode 100644 Makefile create mode 100644 buildtools/.buildconfig create mode 100644 buildtools/3ds/logo.bcma.lz create mode 100644 buildtools/3ds/servefiles.py create mode 100644 buildtools/3ds/template.rsf create mode 100644 buildtools/README.md create mode 100644 buildtools/make_base create mode 100644 buildtools/wiiu/meta_template.xml create mode 100644 images/bottom.pdn create mode 100644 images/top.pdn create mode 100644 resources/audio.cwav create mode 100644 resources/banner.cgfx create mode 100644 resources/icon.png create mode 100644 resources/logo.bcma.lz create mode 100644 romfs/bottom.png create mode 100644 romfs/top.png create mode 100644 source/allocator/newlibHeap.c create mode 100644 source/allocator/newlibHeap.h create mode 100644 source/clock.c create mode 100644 source/clock.h create mode 100644 source/draw.c create mode 100644 source/draw.h create mode 100644 source/drawableObject.c create mode 100644 source/drawableObject.h create mode 100644 source/graphics.c create mode 100644 source/graphics.h create mode 100644 source/json/LICENSE create mode 100644 source/json/json.c create mode 100644 source/json/json.h create mode 100644 source/main.c create mode 100644 source/main.h create mode 100644 source/png.c create mode 100644 source/vshader.v.pica diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..711e4ce --- /dev/null +++ b/.gitignore @@ -0,0 +1,254 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +[Xx]64/ +[Xx]86/ +[Bb]uild/ +bld/ +[Bb]in/ +[Oo]bj/ +/Tools +/11.2 + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml + +# TODO: Un-comment the next line if you do not want to checkin +# your web deploy settings because they may include unencrypted +# passwords +#*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Microsoft Azure ApplicationInsights config file +ApplicationInsights.config + +# Windows Store app package directory +AppPackages/ +BundleArtifacts/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs +[Tt]humbs.db + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# LightSwitch generated files +GeneratedArtifacts/ +ModelManifest.xml + +# Paket dependency manager +.paket/paket.exe + +# FAKE - F# Make +.fake/ + +#3DS +*.elf +*.cia +*.3dsx +output/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..c3e59c5 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "buildtools"] + path = buildtools + url = git@github.com:Steveice10/buildtools.git diff --git a/HBDummy.sln b/HBDummy.sln new file mode 100644 index 0000000..b9ff25b --- /dev/null +++ b/HBDummy.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25123.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HBDummy", "HBDummy.vcxproj", "{B2F0601F-BEC5-4653-A44F-BB9617A02F2C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B2F0601F-BEC5-4653-A44F-BB9617A02F2C}.Debug|x64.ActiveCfg = Debug|x64 + {B2F0601F-BEC5-4653-A44F-BB9617A02F2C}.Debug|x64.Build.0 = Debug|x64 + {B2F0601F-BEC5-4653-A44F-BB9617A02F2C}.Debug|x86.ActiveCfg = Debug|Win32 + {B2F0601F-BEC5-4653-A44F-BB9617A02F2C}.Debug|x86.Build.0 = Debug|Win32 + {B2F0601F-BEC5-4653-A44F-BB9617A02F2C}.Release|x64.ActiveCfg = Release|x64 + {B2F0601F-BEC5-4653-A44F-BB9617A02F2C}.Release|x64.Build.0 = Release|x64 + {B2F0601F-BEC5-4653-A44F-BB9617A02F2C}.Release|x86.ActiveCfg = Release|Win32 + {B2F0601F-BEC5-4653-A44F-BB9617A02F2C}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/HBDummy.vcxproj b/HBDummy.vcxproj new file mode 100644 index 0000000..6b64e28 --- /dev/null +++ b/HBDummy.vcxproj @@ -0,0 +1,179 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {B2F0601F-BEC5-4653-A44F-BB9617A02F2C} + HBDummy + 8.1 + + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + Makefile + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + C:\Users\Nath\Desktop\prog\HBDummy\source;C:\devkitPro\libctru\include;$(IncludePath) + + + C:\devkitPro\libctru\include;$(ProjectDir)\lib\ctrcommon\include\ctrcommon;$(IncludePath) + C:\devkitPro\libctru\include;$(ReferencePath) + + + make + make clean & make + make clean + C:\devkitPro\libctru\include;$(NMakeForcedIncludes) + C:\devkitPro\portlibs\3ds\include;C:\devkitPro\libctru\include;$(IncludePath) + C:\devkitPro\libctru\include; + + + + Level3 + Disabled + true + + + + + Level3 + Disabled + true + + + + + Level3 + MaxSpeed + true + true + true + + + true + true + + + + + Level3 + MaxSpeed + true + true + true + + + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/HBDummy.vcxproj.filters b/HBDummy.vcxproj.filters new file mode 100644 index 0000000..d1e62f0 --- /dev/null +++ b/HBDummy.vcxproj.filters @@ -0,0 +1,153 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Fichiers de ressources + + + + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + Fichiers d%27en-tête + + + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + Fichiers sources + + + \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d718acc --- /dev/null +++ b/Makefile @@ -0,0 +1,91 @@ +# TARGET # + +TARGET := 3DS +LIBRARY := 0 + +ifeq ($(TARGET),$(filter $(TARGET),3DS WIIU)) + ifeq ($(strip $(DEVKITPRO)),) + $(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPro") + endif +endif + +# COMMON CONFIGURATION # + +NAME := Homebrew_Launcher + + +BUILD_DIR := build +OUTPUT_DIR := output +INCLUDE_DIRS := $(SOURCE_DIRS) include +SOURCE_DIRS := source source/json source/allocator + +EXTRA_OUTPUT_FILES := + +LIBRARY_DIRS := $(PORTLIBS) $(CTRULIB) +LIBRARIES := citro3d ctru png z m + +VERSION_MAJOR := 1 +VERSION_MINOR := 0 +VERSION_MICRO := 0 + + +BUILD_FLAGS := -march=armv6k -mtune=mpcore -mfloat-abi=hard +BUILD_FLAGS_CC := -g -Wall -Wno-strict-aliasing -O3 -mword-relocations \ + -fomit-frame-pointer -ffast-math $(ARCH) $(INCLUDE) -DARM11 -D_3DS $(BUILD_FLAGS) \ + -DAPP_VERSION_MAJOR=${VERSION_MAJOR} \ + -DAPP_VERSION_MINOR=${VERSION_MINOR} \ + -DAPP_VERSION_MICRO=${VERSION_MICRO} + +BUILD_FLAGS_CXX := $(COMMON_FLAGS) -std=gnu++11 +RUN_FLAGS := + + + + + +# 3DS/Wii U CONFIGURATION # + +ifeq ($(TARGET),$(filter $(TARGET),3DS WIIU)) + TITLE := Homebrew Launcher + DESCRIPTION := HBL + AUTHOR := By Many People +endif + +# 3DS CONFIGURATION # + +ifeq ($(TARGET),3DS) + LIBRARY_DIRS += $(DEVKITPRO)/libctru $(DEVKITPRO)/portlibs/3ds/ + LIBRARIES += citro3d ctru png z m + + PRODUCT_CODE := HBL-LDR + UNIQUE_ID := 0xd921e + + CATEGORY := Application + USE_ON_SD := true + + MEMORY_TYPE := Application + SYSTEM_MODE := 64MB + SYSTEM_MODE_EXT := Legacy + CPU_SPEED := 268MHz + ENABLE_L2_CACHE := false + + ICON_FLAGS := --flags visible,ratingrequired,recordusage --cero 153 --esrb 153 --usk 153 --pegigen 153 --pegiptr 153 --pegibbfc 153 --cob 153 --grb 153 --cgsrr 153 + + ROMFS_DIR := romfs + BANNER_AUDIO := resources/audio.cwav + + BANNER_IMAGE := resources/banner.cgfx + + ICON := resources/icon.png + + LOGO := resources/logo.bcma.lz +endif + +# INTERNAL # + +include buildtools/make_base + +re: + @rm -rf $(BUILD_DIR) + echo cleaned build dir + make \ No newline at end of file diff --git a/buildtools/.buildconfig b/buildtools/.buildconfig new file mode 100644 index 0000000..116b101 --- /dev/null +++ b/buildtools/.buildconfig @@ -0,0 +1,10 @@ +[default] +name=Default +runtime=host +config-opts= +run-opts= +prefix=/home/steven/.cache/gnome-builder/install/buildtools/host +app-id= +postbuild= +prebuild= +default=true diff --git a/buildtools/3ds/logo.bcma.lz b/buildtools/3ds/logo.bcma.lz new file mode 100644 index 0000000000000000000000000000000000000000..dd9db8cda2c5fa0ba767e5f25dda002579af78b8 GIT binary patch literal 8192 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 D6|7Yq literal 0 HcmV?d00001 diff --git a/buildtools/3ds/servefiles.py b/buildtools/3ds/servefiles.py new file mode 100644 index 0000000..549ef3a --- /dev/null +++ b/buildtools/3ds/servefiles.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# coding: utf-8 -*- + +import os +import socket +import struct +import sys +import threading +import time +import urllib + +try: + from SimpleHTTPServer import SimpleHTTPRequestHandler + from SocketServer import TCPServer + from urlparse import urljoin + from urllib import pathname2url, quote +except ImportError: + from http.server import SimpleHTTPRequestHandler + from socketserver import TCPServer + from urllib.parse import urljoin, quote + from urllib.request import pathname2url + +if len(sys.argv) < 3 or len(sys.argv) > 5: + print('Usage: ' + sys.argv[0] + ' [host ip] [host port]') + sys.exit(1) + +accepted_extension = ('.cia', '.tik', '.cetk') +target_ip = sys.argv[1] +target_path = sys.argv[2] +hostPort = 8080 # Default value + +if not os.path.exists(target_path): + print(target_path + ': No such file or directory.') + sys.exit(1) + +if len(sys.argv) >= 4: + hostIp = sys.argv[3] + if len(sys.argv) == 5: + hostPort = int(sys.argv[4]) +else: + print('Detecting host IP...') + hostIp = [(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1] + +print('Preparing data...') +baseUrl = hostIp + ':' + str(hostPort) + '/' + +if os.path.isfile(target_path): + if target_path.endswith(accepted_extension): + file_list_payload = baseUrl + quote(os.path.basename(target_path)) + directory = os.path.dirname(target_path) # get file directory + else: + print('Unsupported file extension. Supported extensions are: ' + accepted_extension) + sys.exit(1) + +else: + directory = target_path # it's a directory + file_list_payload = '' # init the payload before adding lines + for file in [file for file in next(os.walk(target_path))[2] if file.endswith(accepted_extension)]: + file_list_payload += baseUrl + quote(file) + '\n' + +if len(file_list_payload) == 0: + print('No files to serve.') + sys.exit(1) + +file_list_payloadBytes = file_list_payload.encode('ascii') + +if directory and directory != '.': # doesn't need to move if it's already the current working directory + os.chdir(directory) # set working directory to the right folder to be able to serve files + +print('\nURLs:') +print(file_list_payload + '\n') + +print('Opening HTTP server on port ' + str(hostPort)) +server = TCPServer(('', hostPort), SimpleHTTPRequestHandler) +thread = threading.Thread(target=server.serve_forever) +thread.start() + +try: + print('Sending URL(s) to ' + target_ip + ' on port 5000...') + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.connect((target_ip, 5000)) + sock.sendall(struct.pack('!L', len(file_list_payloadBytes)) + file_list_payloadBytes) + while len(sock.recv(1)) < 1: + time.sleep(0.05) + sock.close() +except Exception as e: + print('An error occurred: ' + str(e)) + server.shutdown() + sys.exit(1) + +print('Shutting down HTTP server...') +server.shutdown() diff --git a/buildtools/3ds/template.rsf b/buildtools/3ds/template.rsf new file mode 100644 index 0000000..e89849d --- /dev/null +++ b/buildtools/3ds/template.rsf @@ -0,0 +1,286 @@ +BasicInfo: + Title : $(APP_TITLE) + ProductCode : $(APP_PRODUCT_CODE) + Logo : Homebrew + +RomFs: + RootPath: $(APP_ROMFS) + +TitleInfo: + Category : $(APP_CATEGORY) + UniqueId : $(APP_UNIQUE_ID) + +Option: + UseOnSD : $(APP_USE_ON_SD) # true if App is to be installed to SD + FreeProductCode : true # Removes limitations on ProductCode + MediaFootPadding : false # If true CCI files are created with padding + EnableCrypt : $(APP_ENCRYPTED) # Enables encryption for NCCH and CIA + EnableCompress : true # Compresses where applicable (currently only exefs:/.code) + +AccessControlInfo: + CoreVersion : 2 + + # Exheader Format Version + DescVersion : 2 + + # Minimum Required Kernel Version (below is for 4.5.0) + ReleaseKernelMajor : "02" + ReleaseKernelMinor : "33" + + # ExtData + UseExtSaveData : false # enables ExtData + #ExtSaveDataId : 0x300 # only set this when the ID is different to the UniqueId + + # FS:USER Archive Access Permissions + # Uncomment as required + FileSystemAccess: + - CategorySystemApplication + - CategoryHardwareCheck + - CategoryFileSystemTool + - Debug + - TwlCardBackup + - TwlNandData + - Boss + - DirectSdmc + - Core + - CtrNandRo + - CtrNandRw + - CtrNandRoWrite + - CategorySystemSettings + - CardBoard + - ExportImportIvs + - DirectSdmcWrite + - SwitchCleanup + - SaveDataMove + - Shop + - Shell + - CategoryHomeMenu + - SeedDB + IoAccessControl: + - FsMountNand + - FsMountNandRoWrite + - FsMountTwln + - FsMountWnand + - FsMountCardSpi + - UseSdif3 + - CreateSeed + - UseCardSpi + + # Process Settings + MemoryType : $(APP_MEMORY_TYPE) # Application/System/Base + SystemMode : $(APP_SYSTEM_MODE) # 64MB(Default)/96MB/80MB/72MB/32MB + IdealProcessor : 0 + AffinityMask : 1 + Priority : 16 + MaxCpu : 0x9E # Default + HandleTableSize : 0x200 + DisableDebug : false + EnableForceDebug : false + CanWriteSharedPage : true + CanUsePrivilegedPriority : false + CanUseNonAlphabetAndNumber : true + PermitMainFunctionArgument : true + CanShareDeviceMemory : true + RunnableOnSleep : false + SpecialMemoryArrange : true + + # New3DS Exclusive Process Settings + SystemModeExt : $(APP_SYSTEM_MODE_EXT) # Legacy(Default)/124MB/178MB Legacy:Use Old3DS SystemMode + CpuSpeed : $(APP_CPU_SPEED) # 268MHz(Default)/804MHz + EnableL2Cache : $(APP_ENABLE_L2_CACHE) # false(default)/true + CanAccessCore2 : true + + # Virtual Address Mappings + IORegisterMapping: + - 1ff00000-1ff7ffff # DSP memory + MemoryMapping: + - 1f000000-1f5fffff:r # VRAM + + # Accessible SVCs, : + SystemCallAccess: + ControlMemory: 1 + QueryMemory: 2 + ExitProcess: 3 + GetProcessAffinityMask: 4 + SetProcessAffinityMask: 5 + GetProcessIdealProcessor: 6 + SetProcessIdealProcessor: 7 + CreateThread: 8 + ExitThread: 9 + SleepThread: 10 + GetThreadPriority: 11 + SetThreadPriority: 12 + GetThreadAffinityMask: 13 + SetThreadAffinityMask: 14 + GetThreadIdealProcessor: 15 + SetThreadIdealProcessor: 16 + GetCurrentProcessorNumber: 17 + Run: 18 + CreateMutex: 19 + ReleaseMutex: 20 + CreateSemaphore: 21 + ReleaseSemaphore: 22 + CreateEvent: 23 + SignalEvent: 24 + ClearEvent: 25 + CreateTimer: 26 + SetTimer: 27 + CancelTimer: 28 + ClearTimer: 29 + CreateMemoryBlock: 30 + MapMemoryBlock: 31 + UnmapMemoryBlock: 32 + CreateAddressArbiter: 33 + ArbitrateAddress: 34 + CloseHandle: 35 + WaitSynchronization1: 36 + WaitSynchronizationN: 37 + SignalAndWait: 38 + DuplicateHandle: 39 + GetSystemTick: 40 + GetHandleInfo: 41 + GetSystemInfo: 42 + GetProcessInfo: 43 + GetThreadInfo: 44 + ConnectToPort: 45 + SendSyncRequest1: 46 + SendSyncRequest2: 47 + SendSyncRequest3: 48 + SendSyncRequest4: 49 + SendSyncRequest: 50 + OpenProcess: 51 + OpenThread: 52 + GetProcessId: 53 + GetProcessIdOfThread: 54 + GetThreadId: 55 + GetResourceLimit: 56 + GetResourceLimitLimitValues: 57 + GetResourceLimitCurrentValues: 58 + GetThreadContext: 59 + Break: 60 + OutputDebugString: 61 + ControlPerformanceCounter: 62 + CreatePort: 71 + CreateSessionToPort: 72 + CreateSession: 73 + AcceptSession: 74 + ReplyAndReceive1: 75 + ReplyAndReceive2: 76 + ReplyAndReceive3: 77 + ReplyAndReceive4: 78 + ReplyAndReceive: 79 + BindInterrupt: 80 + UnbindInterrupt: 81 + InvalidateProcessDataCache: 82 + StoreProcessDataCache: 83 + FlushProcessDataCache: 84 + StartInterProcessDma: 85 + StopDma: 86 + GetDmaState: 87 + RestartDma: 88 + DebugActiveProcess: 96 + BreakDebugProcess: 97 + TerminateDebugProcess: 98 + GetProcessDebugEvent: 99 + ContinueDebugEvent: 100 + GetProcessList: 101 + GetThreadList: 102 + GetDebugThreadContext: 103 + SetDebugThreadContext: 104 + QueryDebugProcessMemory: 105 + ReadProcessMemory: 106 + WriteProcessMemory: 107 + SetHardwareBreakPoint: 108 + GetDebugThreadParam: 109 + ControlProcessMemory: 112 + MapProcessMemory: 113 + UnmapProcessMemory: 114 + CreateCodeSet: 115 + CreateProcess: 117 + TerminateProcess: 118 + SetProcessResourceLimits: 119 + CreateResourceLimit: 120 + SetResourceLimitValues: 121 + AddCodeSegment: 122 + Backdoor: 123 + KernelSetState: 124 + QueryProcessMemory: 125 + + # Service List + # Maximum 34 services (32 if firmware is prior to 9.6.0) + ServiceAccessControl: + - APT:U + - ac:u + - am:net + - boss:U + - cam:u + - cecd:u + - cfg:nor + - cfg:u + - csnd:SND + - dsp::DSP + - frd:u + - fs:USER + - gsp::Gpu + - gsp::Lcd + - hid:USER + - http:C + - ir:rst + - ir:u + - ir:USER + - mic:u + - mcu::HWC + - ndm:u + - news:s + - nwm::EXT + - nwm::UDS + - ptm:sysm + - ptm:u + - pxi:dev + - soc:U + - ssl:C + - y2r:u + + +SystemControlInfo: + SaveDataSize: 0KB # Change if the app uses savedata + RemasterVersion: $(APP_VERSION_MAJOR) + StackSize: 0x40000 + + # Modules that run services listed above should be included below + # Maximum 48 dependencies + # : + Dependency: + ac: 0x0004013000002402 + #act: 0x0004013000003802 + am: 0x0004013000001502 + boss: 0x0004013000003402 + camera: 0x0004013000001602 + cecd: 0x0004013000002602 + cfg: 0x0004013000001702 + codec: 0x0004013000001802 + csnd: 0x0004013000002702 + dlp: 0x0004013000002802 + dsp: 0x0004013000001a02 + friends: 0x0004013000003202 + gpio: 0x0004013000001b02 + gsp: 0x0004013000001c02 + hid: 0x0004013000001d02 + http: 0x0004013000002902 + i2c: 0x0004013000001e02 + ir: 0x0004013000003302 + mcu: 0x0004013000001f02 + mic: 0x0004013000002002 + ndm: 0x0004013000002b02 + news: 0x0004013000003502 + #nfc: 0x0004013000004002 + nim: 0x0004013000002c02 + nwm: 0x0004013000002d02 + pdn: 0x0004013000002102 + ps: 0x0004013000003102 + ptm: 0x0004013000002202 + #qtm: 0x0004013020004202 + ro: 0x0004013000003702 + socket: 0x0004013000002e02 + spi: 0x0004013000002302 + ssl: 0x0004013000002f02 diff --git a/buildtools/README.md b/buildtools/README.md new file mode 100644 index 0000000..f6589ee --- /dev/null +++ b/buildtools/README.md @@ -0,0 +1,13 @@ +# buildtools + +Common build tools for C/C++ projects. Supports PC and 3DS targets. + +Dependencies: + * [makerom](https://github.com/profi200/Project_CTR/tree/master/makerom/) - Building 3DS/CIA files. + * [bannertool](https://github.com/Steveice10/bannertool/) - Building 3DS/CIA files. + * [citra](https://github.com/citra-emu/citra/) - Testing 3DS/CIA builds on a PC. + * zip - Zipping up output files. + * xxd - Embedding binary files in executables. + * python - Installing CIA builds to a 3DS over the network. + +Credit for 3DS homebrew logo goes to [PabloMK7](http://gbatemp.net/members/pablomk7.345712/). diff --git a/buildtools/make_base b/buildtools/make_base new file mode 100644 index 0000000..48f152b --- /dev/null +++ b/buildtools/make_base @@ -0,0 +1,761 @@ +# Make Variables +# +# TARGET: Optional; Platform to build for. +# - Supported values: NATIVE, NATIVE32, NATIVE64, WIN32, WIN64, MAC32, MAC64, LINUX32, LINUX64, 3DS, WIIU, SWITCH +# - Default value: NATIVE +# LIBRARY: Optional; Whether to output a library. +# - Supported values: 0, 1 +# - Default value: 0 +# +# All: +# - NAME: Project name. +# - INCLUDE_DIRS: Directories containing include headers. +# - SOURCE_DIRS: Directories containing source files to compile. +# - BUILD_DIR: Directory to store build files in. +# - OUTPUT_DIR: Directory to output the final results to. +# - LIBRARY_DIRS: Optional; Directories containing libraries to compile against. +# - LIBRARIES: Optional; Libraries to compile against. +# - EXTRA_OUTPUT_FILES: Optional; Extra files to copy to the output directory. +# - BUILD_FLAGS: Optional; Shared build flags. +# - BUILD_FLAGS_CC: Optional; C build flags. +# - BUILD_FLAGS_CXX: Optional; C++ build flags. +# - RUN_FLAGS: Optional; Flags to pass when running output executables. +# - VERSION_MAJOR: Optional; Major version number. +# - Default value: 0 +# - VERSION_MINOR: Optional; Minor version number. +# - Default value: 0 +# - VERSION_MICRO: Optional; Micro version number. +# - Default value: 0 +# +# 3DS/Wii U/Switch: +# - TITLE: Optional; Formal application title, used in metadata. +# - Default value: NAME stripped of spaces. +# - AUTHOR: Optional; Application author. +# - Default value: "Unknown" +# - REMOTE_IP: Optional; IP to send executable to when running on hardware. Intended to be set in command line. +# - Default value: 127.0.0.1 +# +# 3DS/Wii U: +# - DESCRIPTION: Optional; Application description. +# - Default value: "No description." +# +# 3DS: +# - PRODUCT_CODE: CIA/3DS product code. +# - UNIQUE_ID: CIA/3DS unique ID. +# - BANNER_AUDIO: Audio file to use in the CIA/3DS banner. +# - Supported file types: WAV, CWAV +# - BANNER_IMAGE: Graphics to use in the CIA/3DS banner. +# - Supported file types: 256x128 PNG, CGFX +# - ICON: Application icon. +# - Supported file types: 48x48 PNG +# - Category: Optional; CIA/3DS category. +# - Supported values: Application, SystemApplication, Applet, Firmware, Base, DlpChild, Demo, Contents, SystemContents, SharedContents, AddOnContents, Patch, AutoUpdateContents +# - Default value: Application +# - USE_ON_SD: Optional; Whether the CIA/3DS should be installed to the SD card. +# - Supported values: true, false +# - Default value: true +# - MEMORY_TYPE: Optional; CIA/3DS application memory layout. +# - Supported values: Application, System, Base +# - Default value: Application +# - SYSTEM_MODE: Optional; CIA/3DS legacy system mode. +# - Supported values: 32MB, 64MB, 72MB, 80MB, 96MB +# - Default value: 64MB +# - SYSTEM_MODE_EXT: Optional; CIA/3DS extended system mode. +# - Supported values: Legacy, 124MB, 178MB +# - Default value: Legacy +# - CPU_MODE: Optional; CIA/3DS CPU frequency. 804MHz is N3DS-only. +# - Supported values: 268MHz, 804MHz +# - Default value: 268MHz +# - ENABLE_L2_CACHE: Optional; Whether the CIA/3DS should use the N3DS L2 cache. +# - Supported values: true, false +# - Default value: false +# - ICON_FLAGS: Optional; Flags to pass to bannertool when making an SMDH icon. +# - ROMFS_DIR: Optional; Directory containing RomFS files. +# - LOGO: Optional; Logo animation to use when launching the CIA/3DS. +# - Supported file types: BCMA.LZ +# +# Wii U: +# - ICON: Application icon. +# - Supported file types: 256x96 PNG +# - LONG_DESCRIPTION: Optional; Long version of the description field. +# - Default value: Value of DESCRIPTION. +# +# Switch: +# - TITLE_ID: Optional; Application title ID. +# - ICON: Optional; Application icon. +# - Supported file types: 256x256 JPEG + +# PROLOGUE # + +TARGET ?= NATIVE +LIBRARY ?= 0 + +ALL_PC_TARGETS := WIN32 WIN64 MAC32 MAC64 LINUX32 LINUX64 +ALL_SPECIFIC_TARGETS := $(ALL_PC_TARGETS) 3DS WIIU SWITCH +ALL_TARGETS := NATIVE NATIVE32 NATIVE64 $(ALL_SPECIFIC_TARGETS) + +TARGETS := + +ifneq (1,$(words $(TARGET))) + TARGETS := $(TARGET) +else ifeq ($(TARGET),ALL) + TARGETS := $(ALL_SPECIFIC_TARGETS) +else ifeq ($(TARGET),PC) + TARGETS := $(ALL_PC_TARGETS) +endif + +ifneq ($(TARGETS),) + +.PHONY: all clean +all: + @$(foreach target,$(TARGETS),make --no-print-directory TARGET=$(target);) + +else + +ifneq ($(MAKECMDGOALS),clean) + $(info Building for $(TARGET)...) +endif + +ifeq ($(TARGET),$(filter $(TARGET),3DS WIIU SWITCH)) + ifeq ($(strip $(DEVKITPRO)),) + $(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPro") + endif +endif + +# TOOLS # + +BUILDTOOLS_DIR := $(dir $(lastword $(MAKEFILE_LIST))) + +define createdirrule +$(1): | $(dir $(1)) + +ifndef $(dir $(1))_DIRECTORY_RULE_IS_DEFINED +$(dir $(1)): + @mkdir -p $$@ + +$(dir $(1))_DIRECTORY_RULE_IS_DEFINED := 1 +endif +endef + +rwildcard=$(wildcard $1/$2) $(foreach d,$(wildcard $1/*),$(call rwildcard,$d,$2)) + +# INITIAL COMMON SETUP # + +EMPTY := +SPACE := $(EMPTY) $(EMPTY) +STRIPPED_NAME := $(subst $(SPACE),,$(NAME)) + +ifeq ($(OS),Windows_NT) + HOST_OS := windows + ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) + HOST_ARCH := x86_64 + else + HOST_ARCH := i686 + endif +else + UNAME_S := $(shell uname -s) + ifeq ($(UNAME_S),Darwin) + HOST_OS := mac + else ifeq ($(UNAME_S),Linux) + HOST_OS := linux + else + $(error "Unsupported host OS.") + endif + + UNAME_M := $(shell uname -m) + ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 amd64)) + HOST_ARCH := x86_64 + else ifeq ($(UNAME_M),$(filter $(UNAME_M),i386 i686)) + HOST_ARCH := i686 + else + $(error "Unsupported host architecture.") + endif +endif + +ifeq ($(TARGET),NATIVE) + TARGET_OS := $(HOST_OS) + TARGET_ARCH := $(HOST_ARCH) +else ifeq ($(TARGET),NATIVE32) + TARGET_OS := $(HOST_OS) + TARGET_ARCH := i686 +else ifeq ($(TARGET),NATIVE64) + TARGET_OS := $(HOST_OS) + TARGET_ARCH := x86_64 +else ifeq ($(TARGET),WIN32) + TARGET_OS := windows + TARGET_ARCH := i686 +else ifeq ($(TARGET),WIN64) + TARGET_OS := windows + TARGET_ARCH := x86_64 +else ifeq ($(TARGET),LINUX32) + TARGET_OS := linux + TARGET_ARCH := i686 +else ifeq ($(TARGET),LINUX64) + TARGET_OS := linux + TARGET_ARCH := x86_64 +else ifeq ($(TARGET),MAC32) + TARGET_OS := mac + TARGET_ARCH := i686 +else ifeq ($(TARGET),MAC64) + TARGET_OS := mac + TARGET_ARCH := x86_64 +else ifeq ($(TARGET),3DS) + TARGET_OS := 3ds + TARGET_ARCH := arm +else ifeq ($(TARGET),WIIU) + TARGET_OS := wiiu + TARGET_ARCH := ppc +else ifeq ($(TARGET),SWITCH) + TARGET_OS := switch + TARGET_ARCH := aarch64 +else + $(error "Unknown target. Supported targets: $(ALL_TARGETS)") +endif + +TARGET_BUILD_DIR := $(BUILD_DIR)/$(TARGET_OS)-$(TARGET_ARCH) +TARGET_OUTPUT_DIR := $(OUTPUT_DIR)/$(TARGET_OS)-$(TARGET_ARCH) + +BUILT_FILTER := $(patsubst %.bin,$(TARGET_BUILD_DIR)/%.bin.o,$(BUILD_FILTER)) \ + $(patsubst %.c,$(TARGET_BUILD_DIR)/%.o,$(BUILD_FILTER)) \ + $(patsubst %.cpp,$(TARGET_BUILD_DIR)/%.o,$(BUILD_FILTER)) \ + $(patsubst %.s,$(TARGET_BUILD_DIR)/%.o,$(BUILD_FILTER)) + +OBJECT_FILES := $(foreach dir,$(SOURCE_DIRS), \ + $(patsubst %.bin,$(TARGET_BUILD_DIR)/%.bin.o,$(call rwildcard,$(dir),*.bin)) \ + $(patsubst %.c,$(TARGET_BUILD_DIR)/%.o,$(call rwildcard,$(dir),*.c)) \ + $(patsubst %.cpp,$(TARGET_BUILD_DIR)/%.o,$(call rwildcard,$(dir),*.cpp)) \ + $(patsubst %.s,$(TARGET_BUILD_DIR)/%.o,$(call rwildcard,$(dir),*.s)) \ + ) + +OBJECT_FILES := $(filter-out $(BUILT_FILTER),$(OBJECT_FILES)) + +OUTPUT_ZIP_FILE ?= $(OUTPUT_DIR)/$(STRIPPED_NAME).zip + +ifeq ($(strip $(VERSION_MAJOR)),) + VERSION_MAJOR := 0 +endif + +ifeq ($(strip $(VERSION_MINOR)),) + VERSION_MINOR := 0 +endif + +ifeq ($(strip $(VERSION_MICRO)),) + VERSION_MICRO := 0 +endif + +LD_FLAGS := $(patsubst %,-L%/lib,$(LIBRARY_DIRS)) $(patsubst %,-l%,$(LIBRARIES)) +COMMON_CC_FLAGS := $(sort $(foreach dir,$(SOURCE_DIRS),$(patsubst %,-I$(TARGET_BUILD_DIR)/%,$(dir $(call rwildcard,$(dir),*))))) $(patsubst %,-I%,$(INCLUDE_DIRS)) $(patsubst %,-I%/include,$(LIBRARY_DIRS)) -g -Wall -DVERSION_MAJOR=$(VERSION_MAJOR) -DVERSION_MINOR=$(VERSION_MINOR) -DVERSION_MICRO=$(VERSION_MICRO) $(BUILD_FLAGS) +COMMON_CXX_FLAGS := + +ifeq ($(findstring -O,$(BUILD_FLAGS)),) + COMMON_CC_FLAGS += -O2 +endif + +# COMMON LIBRARY SETUP # + +ifeq ($(LIBRARY),1) + STRIPPED_NAME := lib$(STRIPPED_NAME) + EXTRA_OUTPUT_FILES += $(INCLUDE_DIRS) +endif + +# TARGET SETUP # + +REMOTE_IP ?= 127.0.0.1 # User-defined + +TITLE ?= $(NAME) +AUTHOR ?= "Unknown" +DESCRIPTION ?= "No description." +LONG_DESCRIPTION ?= $(DESCRIPTION) + +ifeq ($(TARGET_OS),windows) + ifeq ($(HOST_OS),windows) + AR := ar + AS := as + CC := gcc + CXX := g++ + else ifeq ($(TARGET_ARCH),i686) + AR := i686-w64-mingw32-ar + AS := i686-w64-mingw32-as + CC := i686-w64-mingw32-gcc + CXX := i686-w64-mingw32-g++ + else ifeq ($(TARGET_ARCH),x86_64) + AR := x86_64-w64-mingw32-ar + AS := x86_64-w64-mingw32-as + CC := x86_64-w64-mingw32-gcc + CXX := x86_64-w64-mingw32-g++ + endif + + ifeq ($(TARGET_ARCH),i686) + COMMON_CC_FLAGS += -m32 + else ifeq ($(TARGET_ARCH),x86_64) + COMMON_CC_FLAGS += -m64 + endif + + LD_FLAGS += -static-libstdc++ -static-libgcc -static + + ifeq ($(LIBRARY),1) + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/lib/$(STRIPPED_NAME).a $(TARGET_OUTPUT_DIR)/lib/$(STRIPPED_NAME).dll + COMMON_CC_FLAGS += -fPIC + else + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/$(STRIPPED_NAME).exe + endif +else ifeq ($(TARGET_OS),mac) + ifeq ($(HOST_OS),mac) + AR := ar + AS := as + CC := gcc + CXX := g++ + else ifeq ($(TARGET_ARCH),i686) + AR := i386-apple-darwin15-ar + AS := i386-apple-darwin15-as + CC := i386-apple-darwin15-gcc + CXX := i386-apple-darwin15-g++ + else ifeq ($(TARGET_ARCH),x86_64) + AR := x86_64-apple-darwin15-ar + AS := x86_64-apple-darwin15-as + CC := x86_64-apple-darwin15-gcc + CXX := x86_64-apple-darwin15-g++ + endif + + ifeq ($(TARGET_ARCH),i686) + COMMON_CC_FLAGS += -m32 + else ifeq ($(TARGET_ARCH),x86_64) + COMMON_CC_FLAGS += -m64 + endif + + ifeq ($(LIBRARY),1) + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/lib/$(STRIPPED_NAME).a $(TARGET_OUTPUT_DIR)/lib/$(STRIPPED_NAME).so $(TARGET_OUTPUT_DIR)/lib/$(STRIPPED_NAME).dylib + COMMON_CC_FLAGS += -fPIC + else + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/$(STRIPPED_NAME) + endif +else ifeq ($(TARGET_OS),linux) + ifeq ($(HOST_OS),linux) + AR := ar + AS := as + CC := gcc + CXX := g++ + else ifeq ($(TARGET_ARCH),i686) + AR := i686-pc-linux-gnu-ar + AS := i686-pc-linux-gnu-as + CC := i686-pc-linux-gnu-gcc + CXX := i686-pc-linux-gnu-g++ + else ifeq ($(TARGET_ARCH),x86_64) + AR := x86_64-pc-linux-gnu-ar + AS := x86_64-pc-linux-gnu-as + CC := x86_64-pc-linux-gnu-gcc + CXX := x86_64-pc-linux-gnu-g++ + endif + + ifeq ($(TARGET_ARCH),i686) + COMMON_CC_FLAGS += -m32 + else ifeq ($(TARGET_ARCH),x86_64) + COMMON_CC_FLAGS += -m64 + endif + + ifeq ($(LIBRARY),1) + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/lib/$(STRIPPED_NAME).a $(TARGET_OUTPUT_DIR)/lib/$(STRIPPED_NAME).so + COMMON_CC_FLAGS += -fPIC + else + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/$(STRIPPED_NAME) + endif +else ifeq ($(TARGET_OS),3ds) + BUILT_FILTER := $(patsubst %.v.pica,$(TARGET_BUILD_DIR)/%.shbin.o,$(BUILD_FILTER)) \ + $(patsubst %.shlist,$(TARGET_BUILD_DIR)/%.shbin.o,$(BUILD_FILTER)) \ + + OBJECT_FILES := $(foreach dir,$(SOURCE_DIRS), \ + $(patsubst %.v.pica,$(TARGET_BUILD_DIR)/%.shbin.o,$(call rwildcard,$(dir),*.v.pica)) \ + $(patsubst %.shlist,$(TARGET_BUILD_DIR)/%.shbin.o,$(call rwildcard,$(dir),*.shlist)) \ + ) $(OBJECT_FILES) + + OBJECT_FILES := $(filter-out $(BUILT_FILTER),$(OBJECT_FILES)) + + DEVKITARM := $(DEVKITPRO)/devkitARM + + AR := $(DEVKITARM)/bin/arm-none-eabi-ar + AS := $(DEVKITARM)/bin/arm-none-eabi-as + CC := $(DEVKITARM)/bin/arm-none-eabi-gcc + CXX := $(DEVKITARM)/bin/arm-none-eabi-g++ + + ifeq ($(LIBRARY),1) + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/lib/$(STRIPPED_NAME).a + else + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/$(STRIPPED_NAME).elf $(TARGET_OUTPUT_DIR)/3ds/$(STRIPPED_NAME)/$(STRIPPED_NAME).3dsx $(TARGET_OUTPUT_DIR)/$(STRIPPED_NAME).3ds $(TARGET_OUTPUT_DIR)/$(STRIPPED_NAME).cia + endif + + LD_FLAGS += -specs=3dsx.specs + COMMON_CC_FLAGS += -mword-relocations -ffast-math -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft -DARM11 -D_3DS + + SERVEFILES := python $(BUILDTOOLS_DIR)/3ds/servefiles.py + + CATEGORY ?= Application + USE_ON_SD ?= true + MEMORY_TYPE ?= Application + SYSTEM_MODE ?= 64MB + SYSTEM_MODE_EXT ?= Legacy + CPU_SPEED ?= 268MHz + ENABLE_L2_CACHE ?= false + + _3DSXTOOL_FLAGS := + COMMON_MAKEROM_FLAGS := -rsf $(BUILDTOOLS_DIR)/3ds/template.rsf -target t -exefslogo -icon $(TARGET_BUILD_DIR)/icon.icn -banner $(TARGET_BUILD_DIR)/banner.bnr -major $(VERSION_MAJOR) -minor $(VERSION_MINOR) -micro $(VERSION_MICRO) -DAPP_TITLE="$(TITLE)" -DAPP_PRODUCT_CODE="$(PRODUCT_CODE)" -DAPP_UNIQUE_ID="$(UNIQUE_ID)" -DAPP_SYSTEM_MODE="$(SYSTEM_MODE)" -DAPP_SYSTEM_MODE_EXT="$(SYSTEM_MODE_EXT)" -DAPP_CATEGORY="$(CATEGORY)" -DAPP_USE_ON_SD="$(USE_ON_SD)" -DAPP_MEMORY_TYPE="$(MEMORY_TYPE)" -DAPP_CPU_SPEED="$(CPU_SPEED)" -DAPP_ENABLE_L2_CACHE="$(ENABLE_L2_CACHE)" -DAPP_VERSION_MAJOR="$(VERSION_MAJOR)" + + ifneq ("$(wildcard $(ROMFS_DIR))","") + _3DSXTOOL_FLAGS += --romfs=$(ROMFS_DIR) + COMMON_MAKEROM_FLAGS += -DAPP_ROMFS="$(ROMFS_DIR)" + endif + + ifneq ("$(wildcard $(LOGO))","") + COMMON_MAKEROM_FLAGS += -logo "$(LOGO)" + else ifneq ($(LOGO),plain) + COMMON_MAKEROM_FLAGS += -logo "$(BUILDTOOLS_DIR)/3ds/logo.bcma.lz" + endif + + ifeq ($(suffix $(BANNER_IMAGE)),.cgfx) + BANNER_IMAGE_ARG := -ci + else + BANNER_IMAGE_ARG := -i + endif + + ifeq ($(suffix $(BANNER_AUDIO)),.cwav) + BANNER_AUDIO_ARG := -ca + else + BANNER_AUDIO_ARG := -a + endif +else ifeq ($(TARGET_OS),wiiu) + DEVKITPPC := $(DEVKITPRO)/devkitPPC + + AR := $(DEVKITPPC)/bin/powerpc-eabi-ar + AS := $(DEVKITPPC)/bin/powerpc-eabi-as + CC := $(DEVKITPPC)/bin/powerpc-eabi-gcc + CXX := $(DEVKITPPC)/bin/powerpc-eabi-g++ + + ifeq ($(LIBRARY),1) + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/lib/$(STRIPPED_NAME).a + else + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/$(STRIPPED_NAME).elf $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/meta.xml $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/icon.png + endif + + LD_FLAGS += -Wl,-d,--gc-sections + COMMON_CC_FLAGS += -mwup -mcpu=750 -meabi -mhard-float -ffast-math -DESPRESSO -DWIIU +else ifeq ($(TARGET_OS),switch) + DEVKITA64 := $(DEVKITPRO)/devkitA64 + + AR := $(DEVKITA64)/bin/aarch64-none-elf-ar + AS := $(DEVKITA64)/bin/aarch64-none-elf-as + CC := $(DEVKITA64)/bin/aarch64-none-elf-gcc + CXX := $(DEVKITA64)/bin/aarch64-none-elf-g++ + + ifeq ($(LIBRARY),1) + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/lib/$(STRIPPED_NAME).a + else + OUTPUT_FILES := $(TARGET_OUTPUT_DIR)/$(STRIPPED_NAME).elf $(TARGET_OUTPUT_DIR)/switch/$(STRIPPED_NAME)/$(STRIPPED_NAME).nro + endif + + LD_FLAGS += -specs=$(DEVKITPRO)/libnx/switch.specs + COMMON_CC_FLAGS += -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIE -D__SWITCH__ + COMMON_CXX_FLAGS += -fno-rtti -fno-exceptions + + NRO_FLAGS := + + ifneq ("$(wildcard $(ICON))","") + NRO_FLAGS += --icon=$(ICON) + endif + + NACP_FLAGS := + + ifneq ($(TITLE_ID),) + NACP_FLAGS += --titleid=$(TITLE_ID) + endif +endif + +# FINAL COMMON SETUP # + +CLANG_CC := $(subst gcc,clang,$(CC)) +CLANG_CC_EXISTS := $(shell which $(CLANG_CC) > /dev/null 2> /dev/null; echo $$?) +ifeq ($(CLANG_CC_EXISTS),0) + CC := $(CLANG_CC) +endif + +CLANG_CXX := $(subst g++,clang++,$(CXX)) +CLANG_CXX_EXISTS := $(shell which $(CLANG_CXX) > /dev/null 2> /dev/null; echo $$?) +ifeq ($(CLANG_CXX_EXISTS),0) + CXX := $(CLANG_CXX) +endif + +CC_FLAGS := $(COMMON_CC_FLAGS) $(BUILD_FLAGS_CC) +CXX_FLAGS := $(COMMON_CC_FLAGS) $(COMMON_CXX_FLAGS) $(BUILD_FLAGS_CXX) + +ifeq ($(findstring -std,$(BUILD_FLAGS_CC)),) + CC_FLAGS += -std=gnu11 +endif + +ifeq ($(findstring -std,$(BUILD_FLAGS_CXX)),) + CXX_FLAGS += -std=gnu++11 +endif + +ifneq ($(EXTRA_OUTPUT_FILES),) + EXTRA_OUTPUT_COPY_CMD := cp -r $(EXTRA_OUTPUT_FILES) $(OUTPUT_DIR) +endif + +# MAIN RULES # + +.PHONY: all run install clean + +all: $(OUTPUT_ZIP_FILE) + +# TARGET RULES # + +ifeq ($(TARGET_OS),3ds) + +ifeq ($(LIBRARY),1) + +install: $(OUTPUT_ZIP_FILE) + @mkdir -p $(DEVKITPRO)/$(STRIPPED_NAME) + @cp -r $(TARGET_OUTPUT_DIR)/* $(DEVKITPRO)/$(STRIPPED_NAME) + @echo "Installed." + +else + +run: $(OUTPUT_ZIP_FILE) + @echo "Running..." + @citra $(RUN_FLAGS) $(TARGET_OUTPUT_DIR)/3ds/$(STRIPPED_NAME)/$(STRIPPED_NAME).3dsx + +runhw: $(OUTPUT_ZIP_FILE) + @echo "Running..." + @3dslink --address $(REMOTE_IP) $(TARGET_OUTPUT_DIR)/3ds/$(STRIPPED_NAME)/$(STRIPPED_NAME).3dsx + +install: $(OUTPUT_ZIP_FILE) + @echo "Installing..." + @$(SERVEFILES) $(REMOTE_IP) $(TARGET_OUTPUT_DIR)/$(STRIPPED_NAME).cia + @echo "Installed." + +endif + +$(TARGET_BUILD_DIR)/%.shbin.o: $(TARGET_BUILD_DIR)/%.shbin.c + @echo $@ + @$(CC) -c $(CC_FLAGS) -MMD -MP -MF $(TARGET_BUILD_DIR)/$*.d $< -o $@ + +define shader-as + $(eval CURBIN := $(patsubst %.shbin.c,%.shbin,$@)) + @picasso -o $(CURBIN) $1 + @cd $(dir $(CURBIN)); \ + xxd -i $(notdir $(CURBIN)) "$(CURDIR)/$@" + echo "extern const u8" `(echo $(notdir $(CURBIN)) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(CURBIN) | tr . _)`.h + echo "extern const u32" `(echo $(notdir $(CURBIN)) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_len";" >> `(echo $(CURBIN) | tr . _)`.h +endef + +$(TARGET_BUILD_DIR)/%.shbin.c: %.v.pica %.g.pica + @echo $@ + @$(call shader-as,$^) + +$(TARGET_BUILD_DIR)/%.shbin.c: %.v.pica + @echo $@ + @$(call shader-as,$<) + +$(TARGET_BUILD_DIR)/%.shbin.c: %.shlist + @echo $@ + @$(call shader-as,$(foreach file,$(shell cat $<),$(dir $<)/$(file))) + +%.bnr: $(BANNER_IMAGE) $(BANNER_AUDIO) + @echo $@ + @bannertool makebanner $(BANNER_IMAGE_ARG) $(BANNER_IMAGE) $(BANNER_AUDIO_ARG) $(BANNER_AUDIO) -o $@ > /dev/null + +%.icn: $(ICON) + @echo $@ + @bannertool makesmdh -s "$(TITLE)" -l "$(TITLE) - $(DESCRIPTION)" -p "$(AUTHOR)" -i $(ICON) $(ICON_FLAGS) -o $@ > /dev/null + +%.smdh: $(ICON) + @echo $@ + @smdhtool --create "$(TITLE)" "$(DESCRIPTION)" "$(AUTHOR)" $(ICON) $@ + +$(TARGET_OUTPUT_DIR)/3ds/$(STRIPPED_NAME)/%.3dsx: $(TARGET_OUTPUT_DIR)/%.elf $(TARGET_BUILD_DIR)/meta.smdh + @echo $@ + @3dsxtool $< $@ --smdh=$(word 2,$^) $(_3DSXTOOL_FLAGS) + +%.3ds: %.elf $(TARGET_BUILD_DIR)/banner.bnr $(TARGET_BUILD_DIR)/icon.icn + @echo $@ + @makerom -f cci -o $@ -elf $< -DAPP_ENCRYPTED=true $(COMMON_MAKEROM_FLAGS) + +%.cia: %.elf $(TARGET_BUILD_DIR)/banner.bnr $(TARGET_BUILD_DIR)/icon.icn + @echo $@ + @makerom -f cia -o $@ -elf $< -DAPP_ENCRYPTED=false $(COMMON_MAKEROM_FLAGS) + +else ifeq ($(TARGET_OS),wiiu) + +ifeq ($(LIBRARY),1) + +install: $(OUTPUT_ZIP_FILE) + @mkdir -p $(DEVKITPRO)/$(STRIPPED_NAME) + @cp -r $(TARGET_OUTPUT_DIR)/* $(DEVKITPRO)/$(STRIPPED_NAME) + @echo "Installed." + +else + +runhw: $(OUTPUT_ZIP_FILE) + @echo "Running..." + @WIILOAD=tcp:$(REMOTE_IP) wiiload $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/$(STRIPPED_NAME).elf $(RUN_FLAGS) + +endif + +$(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/meta.xml: + @echo $@ + @cp $(BUILDTOOLS_DIR)/wiiu/meta_template.xml $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/meta.xml + @sed -i -- 's/$$(TITLE)/$(subst /,\/,$(TITLE))/g' $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/meta.xml + @sed -i -- 's/$$(AUTHOR)/$(subst /,\/,$(AUTHOR))/g' $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/meta.xml + @sed -i -- 's/$$(VERSION)/$(subst /,\/,$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_MICRO))/g' $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/meta.xml + @sed -i -- 's/$$(RELEASE_DATE)/$(subst /,\/,$(shell date +'%Y%m%d%H%M%S'))/g' $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/meta.xml + @sed -i -- 's/$$(SHORT_DESCRIPTION)/$(subst /,\/,$(DESCRIPTION))/g' $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/meta.xml + @sed -i -- 's/$$(LONG_DESCRIPTION)/$(subst /,\/,$(LONG_DESCRIPTION))/g' $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/meta.xml + +$(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/icon.png: + @echo $@ + @cp $(ICON) $(TARGET_OUTPUT_DIR)/wiiu/apps/$(STRIPPED_NAME)/icon.png + +else ifeq ($(TARGET_OS),switch) + +ifeq ($(LIBRARY),1) + +install: $(OUTPUT_ZIP_FILE) + @mkdir -p $(DEVKITPRO)/$(STRIPPED_NAME) + @cp -r $(TARGET_OUTPUT_DIR)/* $(DEVKITPRO)/$(STRIPPED_NAME) + @echo "Installed." + +else + +run: $(OUTPUT_ZIP_FILE) + @echo "Running..." + @yuzu-cmd $(RUN_FLAGS) $(TARGET_OUTPUT_DIR)/switch/$(STRIPPED_NAME)/$(STRIPPED_NAME).nro + +runhw: $(OUTPUT_ZIP_FILE) + @echo "Running..." + @nxlink --address $(REMOTE_IP) $(TARGET_OUTPUT_DIR)/switch/$(STRIPPED_NAME)/$(STRIPPED_NAME).nro + +endif + +%.nacp: + @echo $@ + @nacptool --create "$(TITLE)" "$(AUTHOR)" "$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_MICRO)" $@ $(NACP_FLAGS) + +$(TARGET_OUTPUT_DIR)/switch/$(STRIPPED_NAME)/%.nro: $(TARGET_OUTPUT_DIR)/%.elf $(TARGET_BUILD_DIR)/meta.nacp + @echo $@ + @elf2nro $< $@ --nacp=$(word 2,$^) $(NRO_FLAGS) + +else ifeq ($(TARGET_OS),windows) + ifeq ($(HOST_OS),$(filter $(HOST_OS),linux mac)) + ifneq ($(LIBRARY),1) + +run: $(OUTPUT_FILES) $(OUTPUT_ZIP_FILE) + @echo "Running..." + @wine ./$< $(RUN_FLAGS) + + endif + else ifeq ($(HOST_OS),windows) + ifneq ($(LIBRARY),1) + +run: $(OUTPUT_FILES) $(OUTPUT_ZIP_FILE) + @echo "Running..." + @./$< $(RUN_FLAGS) + + endif + endif +else ifeq ($(TARGET_OS),$(filter $(TARGET_OS),mac linux)) + ifeq ($(HOST_OS),$(TARGET_OS)) + ifeq ($(LIBRARY),1) + +install: $(OUTPUT_ZIP_FILE) + @install -m 0755 $(OUTPUT_FILES) /usr/local/lib + @install -m 0644 $(foreach dir,$(INCLUDE_DIRS),$(wildcard $(dir)/*)) /usr/local/include + @echo "Installed." + + else + +run: $(OUTPUT_FILES) $(OUTPUT_ZIP_FILE) + @echo "Running..." + @./$< $(RUN_FLAGS) + +install: $(OUTPUT_ZIP_FILE) + @install -m 0755 $(OUTPUT_FILES) /usr/local/bin + @echo "Installed." + + endif + endif +endif + +# COMMON RULES # + +$(OUTPUT_ZIP_FILE): $(OUTPUT_FILES) $(EXTRA_OUTPUT_FILES) + @echo $@ + @$(EXTRA_OUTPUT_COPY_CMD) + @cd $(OUTPUT_DIR); \ + zip -r $(patsubst $(OUTPUT_DIR)/%,%,$@ * -x $(OUTPUT_ZIP_FILE)) > /dev/null + +$(TARGET_OUTPUT_DIR)/$(STRIPPED_NAME): $(OBJECT_FILES) + @echo $@ + @$(CXX) $(CXX_FLAGS) $^ -o $@ $(LD_FLAGS) + +%.elf: $(OBJECT_FILES) + @echo $@ + @$(CXX) $(CXX_FLAGS) $^ -o $@ $(LD_FLAGS) + +%.a: $(OBJECT_FILES) + @echo $@ + @$(AR) -rc $@ $^ + +%.so: $(OBJECT_FILES) + @echo $@ + @$(CXX) $(CXX_FLAGS) -shared $^ -o $@ $(LD_FLAGS) + +%.exe: $(OBJECT_FILES) + @echo $@ + @$(CXX) $(CXX_FLAGS) $^ -o $@ $(LD_FLAGS) + +%.dll: $(OBJECT_FILES) + @echo $@ + @$(CXX) $(CXX_FLAGS) -shared $^ -o $@ $(LD_FLAGS) + +%.dylib: $(OBJECT_FILES) + @echo $@ + @$(CXX) $(CXX_FLAGS) -dynamiclib -undefined suppress -flat_namespace $^ -o $@ $(LD_FLAGS) + +$(TARGET_BUILD_DIR)/%.o: %.c + @echo $@ + @$(CC) -c $(CC_FLAGS) -MMD -MP -MF $(TARGET_BUILD_DIR)/$*.d $< -o $@ + +$(TARGET_BUILD_DIR)/%.o: %.cpp + @echo $@ + @$(CXX) -c $(CXX_FLAGS) -MMD -MP -MF $(TARGET_BUILD_DIR)/$*.d $< -o $@ + +$(TARGET_BUILD_DIR)/%.o: %.s + @echo $@ + @$(CC) -c $(CC_FLAGS) -MMD -MP -MF $(TARGET_BUILD_DIR)/$*.d -x assembler-with-cpp $< -o $@ + +$(TARGET_BUILD_DIR)/%.o: %.S + @echo $@ + @$(CC) -c $(CC_FLAGS) -MMD -MP -MF $(TARGET_BUILD_DIR)/$*.d -x assembler-with-cpp $< -o $@ + +$(TARGET_BUILD_DIR)/%.bin.o: $(TARGET_BUILD_DIR)/%.bin.c + @echo $@ + @$(CC) -c $(CC_FLAGS) -MMD -MP -MF $(TARGET_BUILD_DIR)/$*.d $< -o $@ + +$(TARGET_BUILD_DIR)/%.bin.c: %.bin + @echo $@ + @cd $(> `(echo $(TARGET_BUILD_DIR)/$< | tr . _)`.h + @echo "extern const u32" `(echo $(> `(echo $(TARGET_BUILD_DIR)/$< | tr . _)`.h + +$(foreach file,$(OBJECT_FILES),$(eval $(call createdirrule,$(file)))) +$(foreach file,$(OUTPUT_FILES),$(eval $(call createdirrule,$(file)))) + +# DEPENDS # + +DEPENDS := $(OBJECT_FILES:.o=.d) +-include $(DEPENDS) + +endif + +# CLEAN # + +clean: + @rm -rf $(BUILD_DIR) $(OUTPUT_DIR) + @echo "Cleaned." diff --git a/buildtools/wiiu/meta_template.xml b/buildtools/wiiu/meta_template.xml new file mode 100644 index 0000000..9e19b88 --- /dev/null +++ b/buildtools/wiiu/meta_template.xml @@ -0,0 +1,9 @@ + + + $(TITLE) + $(AUTHOR) + $(VERSION) + $(RELEASE_DATE) + $(SHORT_DESCRIPTION) + $(LONG_DESCRIPTION) + diff --git a/images/bottom.pdn b/images/bottom.pdn new file mode 100644 index 0000000000000000000000000000000000000000..6802a357bbfb87f7e2afb5abfb481da034834292 GIT binary patch literal 58321 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 literal 0 HcmV?d00001 diff --git a/images/top.pdn b/images/top.pdn new file mode 100644 index 0000000000000000000000000000000000000000..3b0fcaa8f9363c3df1ec64b853f2935172dc6d97 GIT binary patch literal 91726 zcmW)oSCZpQvZZGUvxK()6=oNb5N6%i3|eb|5O2^RG$9GBYZf?>T`!fHMKVbs!o$xw zpO+(8`2YQX|L5OJIjLjTRR6j@<=+119|A%C`Bz(gns)!sKNtbN8M3=txBvWu|MRac zJF7DK?Cl%;VLg|1OSgpU40G_ud|3{;y?f{`1f0&Dq|C z=yEf&;E&~ptr#}oEBEhPKIPd2{4KD#?WKP|VPnhp5S3jwq9FhK7;kbzlmn0bb=OHJ zZus{otq|L^xWF?v6MRbvY*C(H89YHv1wZt-x6)SB8<8sTm4rkF+V45p8~gg(c1iw* zRdY(t`@ztn9O^JlE)o77(9q-^8h!nIg1?rrt-L*)j$QjXn^v2Pa`?GtBI&@Zp8 zrVOgFI4t+kz$0eNDfS^JbQ11wB|$h9D5Q0`2!jmeR2**)i_Zl7o^rYB*p!vXQ<14a z#95QDs1o9@w6m<@pq#_9-nZQ=+!R^E71`o(gA;~W&SFUgm011aV6#wX8`(924YW_Q zb>~`3_Ih219vab_Q=hG4*Y^GLQSDf(ufT@t<#?Q4mDvwn<4?E5Gu0ByUK#dAIQp|$ zm*6@G<^-m5#Zp(m&zJG4$Y1)Zwp_tw$;`__t?F#8lZ|3zUSFPI)KypLYJAb(pL|Yj z8k+12cEynUnKx!-@7;P{WfOWuxEnL>{{-}K8-At)#AGkIAGnugx>eK1X?lq)E1zQ| zeesTAgNqfjIWG#a&@5*5qadTB6g#F`LRr3Gu!*{`D;mPcrn z<(`XmT?Q=OPT@~6zZ#%KrLl3R`RIW$*A?Q8NM%vrg zG4XRe47M*yf6M!PTT88W=%Bo^utFg?DK83Z*zlsg(@i9mo?b%e2`Kvo>dCtcR)=sqRh@6KT&ffHhxqA zMOG@;*jE5egSuF4)OPCadawNp{WU>lyDLCCHA|D=bR_*E-bT?K!=jNN3-W2d!~3?X5#Mq zT--Br5~MKHnIe+8FO#ag-Hx>cI5SYjXvqU_vFT%3A zbAb8?hp1Hw5p%kl1wK$lDzEWp+X-Vm@Cftca7?0rXkR;OOryX0RQx=|MxiJ4fYLD& z%?}NziRBc5i&=Gkf_ETs5)KV=iH&fUu#wFZ`8yX#!8!I;hc4^OK{M@|7l1 zESA<#2m-H(NI>x!O%A_Kqk_|!aaqb2gr&im7aHuT?I|Lg+S~3Zp92j0VMk5yu zY4VU2RTkx#S37VA9SgP4(aE9~GoB>U<|GKTmn!3`7rT7zSx-H0_ldxJp|(j5AMsAu zE_XRzp~CHpg}pHbcUP5u$l%3S97eEhU(tq>_KKclPx7MBo#*CJaPV7dWO{amFXLlz z2eW#D;4^T^St`-QzpAsZYq|{6AWi~mS(f@ z2o*JI!jNte-qyOHHHD&$o$eku`-=9Ckz=-~<`6PUmlXox*hh#8vwOI%3r!bud4D&3 zw#xc!)7{ovPF3hYyfZReyjK|QtGB?&v_M>xu-wKEZjs;h&&c zb#bQ0wvf-bO>WH^EbkES4x+vrS5Z~U!DN$V%4+$XM6|30NhI0xJcalIQKFT0 zGRh0CNfX%xSy0CLUP2Gl`5Yb@Grn6lnzP$hm?-*`2g@%H-owdOp>v$yyPVql2!q;1 z`XoCx!k2N_j{}hi~`IR$;e7@nt zRC&jHia{C<=LY)MDId9s!H4@4EAw+-Ez3GpA2}Q0!+GKMaC} zc3*3z_T1dZOLYj^OqN1i?ImkAtO_#`*@IasgCL<^v)<3-vHBaCT3i#jn4y~EgU-i% zkKz~7YHKm%H=iNzE`65wt;W>&5`uWL_fAB?!7Pqr%ru0iE_XSl z)*PLl4vi^t2rnzcX2ci_9@mTr*@!O1I^%jf$VYhXi(qxk=Sx;jNUr7n1Qw|IBvgx{ zaLqGxT+qb?&s+{k_+kd}n zY+{@4^M$|Per<^3%tMO88`km|BCQe*zwnPn>a|GP8`<4xd4}?t+sYT)?tOP~KO08m zbxRAc+i1grfSss54M&ay~oA(gYTK6$Z+l* z%p>cu@s;S$s~TcjMJ(}=ph?DI=#pbiK+a(ZJHI?*UV440%*_vb`i7`Y5NhSO%M}rD zeI_5HMCnFOb_~&$zZVuEtn{3ZnPy9ngSVzIaWqZ| zOiWq0m&kUQ=H;JKe60^9Kc)JdHF@B|6QxqW#VdMGulED58mf@NHx@B}{yO>lc#|p& z7ck7|FQ2LU6|@2*OYpXWL*@rfcA~N;& zKppG1fgu-O@lDRujr%_tN!Y96pD&u z>CAK&DOTcO74cGK?OZXXfVwsKeY8uz`J2lv!F zrcd{B;1jHmFEiY*%prF?#|{(xNtLygWx0o z4E}GFxDV->@#CaF{YlbRC=8-fLe=t;+6{Z=4SI6FY4)O)!`bqPQiHoV+t{9Ew+2;R zw%XkKwGe{^(`TQVQ)g(~im)$M&}d8WbU&nL9<`^zC|tqpWynBxl4SeFyFg#+4>>X& z0`cqB#)u4QPaiVgMwt@^a5hYu3n3hAFd3F@p-18D{0vucr@A)}2SIDBP#2&DMeiLG z`&M9yA69s}@RNU7rbfy<>7<55s^UVQ8}n1BCU}@SC7=D)~M|OFrD{r84!;b1) zStqW{`wjN*hn>Jb&|W=jit1XVOv}Dub?>YYh!UTBgZwDaod2f$ARAR=HA_?z*1M8(z(yuWzFqa<*u}(t^vj59 z58G!=p8ZD5Kfh{*-h=OYxUg89l zKTN4CFS%vKrpv3B($jb7cRw-9`YzX-K%5EW3$rj#d2cfpwL1~(*Oh3#iE7OU6p4Aw z{GDja%`6N1m(|$2pxhMM3V7!bSEawh&c>f4j(M<;6{f~=uvtZA+pX;VNI|BOZMa_U!(0OqL!h^l*$q~k<0Ta-lZFR*>pd-z8p_9bj zYahXJ35m4l@-~)SHL(G=KeE`c5Rx?GkQ zed%zc^-&KI3Mi;pp0Q$8tEb@AXOT%cd0s^O6<(&oylbV(Z>DFu2aeHT$w>9{aOfl* z+Gj(zuVEQ|f1B_15YpL>0_$hPdZDtqDdv)9=JHUU=+LyR$z4V-G2Jpkkm5G2sP{OZ z_%yErPmHp$4)poU9I6~={}li~!JH9n0()6<3CjB+F31DBS0@)*@zc?U%A?9>i%kAN z*QI)IT){#~R7^=dBML;u!T#H6^1Qy*VHEtk9@9kEFq9FWwv96T690Q0b+KX5ty;RX z)V?iLc_<@EtPH`U;zrrB)kQ$St;T;*>5$w@G;JdiSs|>aZchAZ-^u<*OuTUCOsyf6 zk;kN(M~YdCkQ(y|-z2NhOfipwHuDN0L{aej4%m=6(5A5FC zHO({c_S(WWF=NuUd&I#~8u3@RcX=z!9yy4Qp6D48|5-0OkME|aUw-==LOP??Jq|6dYFpS2@n+F`an;lj74W9EN#XQgf7+ zwvNF?F7Qws81f;Fa-M$cycH`*gRHA((dh(-J#;zjvhaud)qDAn>$P{DO4yiA9$e#x zaK=>+hDV0qSMbW;qU~}6CJ{z&fWw*=9-UFJZqRKh{|Q`F>tL@pxuVf0d^pPjVI#4F4giKdGES(LVM>vgjtlr<}wlbmhI&?Nd*an zU}~iOEOp65%2V7kEh126{A|69?HS>2DhKbde?-mMip)Y8B6( z^P9AIt)Qzw|0D}7_e6egQ>HFpk7;?$6xLJ!8dS&xn6M!SH}k~P-tY}}{Kw*%IiB{n zylxJ0>(TAV6SzvA?VxaW(X=+raDZ7C@iUoQyBZd{v;N8MrP$4dkp|}=4N8Rzic1jL zmV`V^D1^jVh02=@7{W%p5DdNBk@$rA-T%;$a6+}}`7)|s8|^hKFXwF`eJ}U@l@&76 zk1jAjIuOXO=_?_h4!$z$m&lUMwI^_~gMPX)Zp*Xi-rLV?t15d!C8o3IusX+@8u8;FXMQ|cjedQV`;17SAH(HEkQ1OSwCt4p?sF`R4eV@5 z>vobV=xT$=BtPlQrs1c2I%t^<*qwiK&?FES0dd{uM9iOz%*muYPZ?VI8Tot&sT|MR zFvdWISExGz@|rt;w^qHh${Pn~WpMGy2WPsHfZoQjjsz7(z>c*)Rs^#&@EI^r!}8yl z8e{fg%r~oJ_B$C0d6%^{KPQR7O2vsErrt$aI-QM*MS<8$gCHydzq@aF0#ndu@}sA8 z@IEvhYaY|FyE9V^IKm~uwTndQ30{XMeHNSns90)xjFAF@1$dMGSTnjQXf%Pk?qXFLpV!jYBGtbARp zGBRuO%D-=}W04^=If+FOTfF9t6=hxUS&mu>{Q>h^lan|n!+)X^_faFRL5Ix?;;WLmA6#HlASv4MlUx4RvJ<%PGdHp-))f6lk%hZu z)VlB94eQHa(tx_$;(88!y%QNN*(&+b%Hi-XFei~Kc({`_;*{4cas^#h4P+ZzVFbG{ zmF6L|%gT8rM)ZbWTSrgF=7z$hYWK)l90Ah99mhwNX$d9>Xd4(g?-NuAj?x{!EqK|! zq8rM1m5dJDC%Wu~R!*<7qCoYmXNaKr3HujT2(HfpkBxVQT_^}HRw;Ks*@D&BrUf0X zkSn5d&tp9{9BZ##)SC#Oag^(c>5W}>@hIw?$6nV$7FzsRv-9ufcOo{CAzf8wRbo3Vf+{QIag|p@+kMI&xa6y=5d2!&fiTjqo_Jp9v zNxlVmln={}K*9cq8x4|JWLOgHH$|*6c4bv+Qd)vWX@?eB1IPDY!LN zAY_`Z=9lio@AHMrI`uzq><$obEZz0dA&mr{7wCH}3kow>*$l*SzYS%m!H&Ao=Kyb@ zFW*LK{xa!H-uVx1MS)e{L4`|v@{aITzxt4*C5kb+-Mr5j_etwZvqoPlLaF<5z_bVz z6ty#b3qhkAvj9f}Mo6}I0uhB0OExw5`0#q1FE+UIaBoZxFK>?<=BVPyv}bnf;JvE3 zky*`PVIV5M9pmnAL@Q$|-ofefvB&pdd`=+JI^aE@IC8@R?xL^#wfVleKOj`l9F9zb z*Y#G%F2M_k?;mLF<<}V3KYlH^Sc9D#zQnf!O;Nd}q(&dPdssY8>v=MHikyHWkCFTf z*7i$c7hQKI1$wQVMUd-6zt8H9K+1k71hO~QU-q;mI9c9UlU0t$1s#PB zH6g4@@-qD3pUz5~0Bzj)PSPmDek<>?4e@&<`3>?z9Q>m}1};umFmP1|RB?(g;inBY z@989fyp^xpb<`4hdP`X68Zbm45gS+E18fT3%;Nd-%3!!wX&EcNo~5yV(Oj1hF0(3E`*b zLkXUDsQCc(S}l>XEChP!?26lsQh-{)C6X3=U!=s=Z+JD|;Zu8uG=MIK^IWM5LGJ?H zv{1VrX-mARQ|@Ht#WGQYm5mCg?Ukt?Q)t7Wtn<%zczrIek&Xel<5eTQ3!!{M4w3;2 z(opG}`2F{H%Z&td>F1%$MU11K8$8d56hW`twkm$hk5zyCXuHO1{fy(BEIZpY_0%8F zdjz&BQB(32u3vuR0X*TVy7uN0k(M)jZo+R`pd-*$DB?G!Jn;GLO1Tri=2~Ay7lEv9jzJcKSZEM6I?%t%Hn9*oc|R3> z&+oTG>+GGk30Dij?vwe4Z2C=ue$xy2C9gP!_boEmVuq~tdG_u7!xu>-PpMHh8(%WY z-s+Z`v(^V8_AK})jbQnVn$4cnQkc~^oA9=oV$P8SyG|^XrSPy_=CZ?^uKZkD!lg48 zDwR2YUf{gTFFk2*hGU&CG;6ld_W**?Dl?TNJa3ms1mUjG&99Wz+u4ra-5ctS;g0LhID`#44c&DJI9A-IX4b5qb zg0aiSV@4>slA^xA_QaH2a*d{7ZXh?p^ys=mtb>-2W?gBZhF@_iWn?jk5goTPKY^C6X zq66$C9j{C;7>&Q=c@pH;vAjQ)pfmY#aoQHvghpQUa@Fow)kjD$lRO^`-+W2ddr??I3K% zvV%&nCtyt2b6M`t17O(pi7{}`=64Nm^mES=%1tlAW9y*zEh~;kmOsq7gYNiy0>UTm z+Up^qUsd~VkM->n77&}drvBu|Fh@-2w3{MkMd9#{G~Ro+C&ht~ z7xS?P{xu7IO>8@UvEtNd+Ea?VStVr^6XLFc<=ZCY^>1$N?6754_GePd-!5m3WtDXzy+ia zpvc>tz5%VkJ~Ii?sk?8}6ks_@_HY)nO1&`oSwUXi;*cKLrvhbq-TDvkv!NO$2VThD z+f@9a6wK#0w!mvtWjfq(gfj}f()?U)vU>wpX0hXDGJb)1S@D*a>72S1zQ2g?6r<=- zJ(qK^b^eIo4oAutk{YN@H$yoCQIrr5aNvo0&LE{~%@EQ2A0H%#U0iE8a5UVrG((Zu?l|D+{)8T!ufB&`Nh1!xbdzu~%p*L9k0{0}2zh1MnV z@v}aUcZV@>`U_U@rH(*f_qbxo36!t9quVtO-qTR`m{xc;9H$qAQAoEU;bIJ|EEJj$C_HbayXRHvswNUJI_%$XGy_J?tA9oB zITtyFm43&&=^v|wfa((IR2>lUdk65dpw@(3x&#`01SEgCHrBRX*HF9fb5GeInmoEh zWiMT*m{6n@;OxC-54dQD`6w)E@{G!v0K#lI0hC4^z9Hpd47+n8GOQHij^dvY-7wgS zQ3-1dKaadEY;CcDeXr}{koW!qj2y8Ha!_oen5oYwJOj5i2I~EQXpuWBuH-=!)MsK! zY`(YyZI&U)bNe!VrR@cng+J5}Sa26hc$e6cAn>Mb5M{Ea>Pl&17FEsZkX$WNML?wp z5&6mX zkT<&lIYp>yymIo;F<$x-909S4qe2mCd(Q;OjqlqnMU~5ohT?|Hd2|radGG!6txL&A zn3S3$nQI{yi6o<~en3(+=gk?ALN##>2$&;4uN?0D$MeIpmn(%?h+PA9J%q2i{Ll>1 zg|0v1a>pq+Rox3(Y`Og@sWV560~kewMto?jO_|kN*yW1L8uxB2)!A2#Hy5|qy>@9z zkSw0iaG)cyM{suSHy!7V>46O~7>gw5AA`!_ts;xVMOQ|?jUf5>?bBSUgv#0X0meV* zZPs{^e+N4~m`E&9g@5&Efr3rU869^gcP{1txr3YP|Na6wDL}~cup_Ey- zY?nn@zXNA8OrW}1$ny9@zmLh5;5z!oQpTyKEs!K*KGGJZ>#(n%BfJ5MAu@zlU2wtu zlo2m8)^{L|KR^QgdvP-Uwp30Gp0aFGPzCW1%o;$Vfx|(Q>lUU4#R$oRSOMhY=3PG! z-Yr29;5m?a*;~jXB8U5^F7GO0dVx?G635SpK0}#_uf!n=IZSZ?BA#%oyVi1N+nrd& z*%Gdo*B}I1sou?Wu63<%j{b93!)n^J-05}x#4PivUu47g0 znGw4InJ=R~402AF+Nf;Xct`JrKJJ5WI)yrHM-u~@C?*5aPu>rs`s+cSk z56w%JC}VzEdTUjavo7J-zz+W>1`T|^}UcTxq-mMW|h zANkKmz$4`=^FIHV^GL)ca|%Iku<>U}!Rfg5&f#EjrL8hu zm!^$dB(J|%v=b1%SlcvV6wg^0gWsbqMYbn|uGKmu)I0;tGuCX3q?VhFmzDICbpS(&0NU_6K8-$Slpy8Q^ zdywp@TD_r@qR+~QRWX729o`8fx63IBS;CZ6$UQ`tvibZCF{|qcW=gZi+ImizByQ|B zFfVb(nz0q$;IF62q!*_eeoZ2GS99`oUVv@e03WH?_E6G~&(~xLY(&T1NPl?0qKbUi zb1xa7h&i3PAq6`r0kx}nY63tBG?+>}|6D2nJmNh+5b&n~)t6A=v`fb>IW6$2MBJ}l z2&r@n>31N}MwC2%nbOj=Y6b2JdK{p3OXb_aD~|BpzueTO184#EA11F!OC?z)m@;>| z9R^aad_(f-J_{!KSP4*@uRa9D$P9uyevzA24$kh2LYj@! z;t~dcv0<$42aISyjeGU;OjGJJBevkhui!741z-~;TuhzRS3!5tiRy8#@L0x*fiPG}}}$^?(rEyseGAvv~uXl<2$LT`XLp-8wyrPcP%bf07ozn! zGCx~`IQ$;)5C%&Vj>hzWZ^L_>h0$k{9e2ns?Z;bT zWhMF(fgEVUsX-GeAoHRH?DI6!gIj?N^wB6tZ#1|tE>G!zS8(ne3Cu|i%!F)gvE!eH zZ$0G))*8ooz{~7-QKB4;wLJQ3@JZ_&0q0sjMCvcoExCOmsqx583;=MQ*7XgFnFb(L zH=3!A6dQ}H=5-ymSy~4jF~lmeu)1Um)Lz%iI7%=14F@T*7w&> z{R}$^i-UH@luS}=3$R@WVf(`f=nP^!UYyQ=LX9apZwkS-q^6if^{|**mMd~`_5e)< zeLodeR-3P0L%Bry%R~4OfMwXarSfS-v2IN|_=`{+hGu?_P#7(?LmPAs#asxd@Ic;LTe z<|x|VZmyPxnIIa{AUIXut{@8 zZB0tIQycYZjT~C!HvcLuIotX*Cs!cd-_2}LiF=CZCSx@q?#~Yb<+`ApE;zbOs4&1@`Q6zj`37IV#q($W>x5`^nSk; zeJjVicn6J=`Zs{v(mnsh&TG00TEDSIP*lLYvUmev$^#-~8wKo;2%3f$;zqCoE2dbJ zfX4;2i&(^X;dF;o&>+ECzxG$)TUdx*F#^9lS>nc#J;;6L*w6a zh-S$3L~%w6JAniWpy;?<&qCh8Oq#?m1%mr`d%!3@g>F5EEWp*5Ca11gt$m&}Qp8?X z>yq{(V4au-+KNG67tpUn2Dq;ZG>z3MyuJ<8g{s;Jz(ou*TXMmW)H&FawwrF@ItYrdj1F-;ZcS(TaSrtb! zQ=^$Bab`v3X8>4&u742( zog#ekF~V7^GL|`)Cv|sfEJ$`fENi4LU`|2Y<)+~$BF*kIP2V)nO@BSXw98?=c~;sl zx3j*bk^w}Qc+7(Z$Y5;`%V;rzT{E$6fYbSDtbKFQDb-bg)V=s9h!COk-wKj)Wt@Ti ziM0ZT0xedpvZBEV;(0ZuqKu&M52eR4q=2T+K-(8G!=!Dpf%Kumr2ozaD}ob_vcozM zLaE5U<_ZrlvD&74m}JXR7As}pc!J-*js$~G)ahmUj}eXrSG+g>wob748}1ZfzOyHk z7ODa$5u_r)XjuA=fhkJC-oVr|KGTmPLqrbvz)EOnbgpyK2J{ovcp7c;k6xfZy41#T zB_5Efr&A^WyvEjH1-vV~gk0j7?B+cHM`J3RdU?o%*5_i}sOy=o_e8_c2z)qOrjf!+ z8KtEnXkEvh86yLqO#x2|mBMoK*+0!-YZ=J2FW1_^Avu!#s}p+U5m0%W5FEofLE(O2 zEJC`wE`={f_sHL}-46VSz7#gl(N3%daEA;~Kkwhh{gO4sgfP8v=sfh3NN+HIAx5PU zkrOFZ6G2-BQw~-AbILO13kM*c_%l7IE7p6&C`bkD6l4CfaSX^a5JQTHd0e)~^0XZC zh+e({lR$qiAMvR{t?8^@pn{H^PYH_sR5eFynZCl}XitXEt18eum{RZ9ON>a0VWp{P z&cQh0`HXA%Q`O7%nW*SjXy?J?k#czp{U&JOUQMikY;YyEgiKKPg=?OUpQQ}g7YGM= ztsb2yAh)@d=~9}|_!1`|jA6h8oBKR{xZR#oBl%~Py+OGpqb$B>4f=#2d7|}=cP;g+ z(p!3ib^}mkDi$QK^c&C}?He@ks^BPL;u^44APY)-3ykJW+Xv(#+;x&d+3$|BShpzopj2yqA7R?nxRvkX<|ewaO-ea(EaH<(8 zSSO@8^Iai`_|*H9GmHtiwT>Ap3P&05isHemhX&*gdjFh~4i(BE0ZROC=u^l5IjyhI z71J!foVq{}wkmdnK^ansl6{dO*&as)a+p4R#9`tejln90K`u~qi=(RV!aZKq$_Spec` z*&e5K0IEW~-!eKpHFLD5iC1gq3WQyLYk&oT+@S7o)=zV4a7-AIK2-}71zf2T551J{ zdDqmDMzab$Pa+qF*a=zu9sCe6dvG=Xns&2ilhcEtlXp_S&3G6C%83{?(25&#hSxMh z@MDP^8>gYjl1*@O>?I@vkX5>gEP5z6}Oqkptd?pa6RT*R|Ol!0@O0(g5h(12+Eq`n{*OPL1UXdXZpQ zUjw+D8j#m#64{gUGdP5)h_C&6p`!^AejQw!E7;Ic0!1HN-uiRFROr-d*;3l9(vRM~ z&h9H9mQL31+s@(++Dg^!C?B9|&>346Y8d0q=vY%ar|Of|y+!y`=(%_QQX@L1c{^Im6#T zZnCvi8bH2g4%pJ1n7w~DT39;tmJA-uDR=hp8yKy+bGi~YUN7dX505$su})vR>z2P2 z<+)3O2u=}!m6oB`!2gC6+fwm1qaKh#FQBn;>-UM*Z1a_ zttfvR$hRE9V0hED6Oj@T6-o^Gfa$f_EX{cWvG*2(+-e%T&C+P{wr_WmYlSsoDTr`M$EKQvC{2n@>`pB|j1dJTZTKw?J{{eb!b<~Bj?0$K8x8K+Fq zD^+#?y+E~KC|>44pfcQ^o?1@}zGCo!PAc>!K9f?h)?Ry6-|cF?z= z(i#8!n=jB0z7Se5_1&|UNDoGP_1A-J4Pz`=kqq{-qh=2W0ly{!`vrY_@Hj0MUx(cVGPY^d=W4U_6d^^#-HH4mVByv)KyC zF%cN4tAUByHG@8P->7qdbqRr~-v~|Z;`{;3^09FcuQcffD!{Yq1uw?im&{Au2J$Bt z*uZVn;jM(sf&wiD1{>c!7+_GFZ~rASa9>>U4WPE|lU|>Wu)#ubfV@9W=*LX_`e9=1 z3qkak9k|XlS>B!=Qsbmj+iLK<<=2Ri%rW8tZrERr+gxUx?hf4Z?=QfWs+t^DZ89d+;V~S71C4Pe?hHL@J6g9)~+n#8MZkWK>iBO%! z_9G7#1XiIhE&@RV=G4Ns15AFS%2h&jw?~f~kX#|om*D_!8y5L8JB}UYnD!o@JP#7k z=sIpk=n-%~ogS+-8*r*VH)5p(MzH|^@a~Dbgd_oE`}43Jq6|{m(i29JPna@omV8NA zkXNN%aU!mEvcR%c-@MG0@d>;dm30ux+g%5wbRL++rlB|Z4-`Ps3I+t6;a<=C@=y@m z-Ui5GgZFF;60$1g=)e7YvsrFGQAX|<$&26Q%1$o*#quzhP|%a~$H|=XC<5lf{7C(C z!TSpvJh3T%#(M~46Z&Q|piAGrhE_$b^|em|R1CGY(|ZSrgfArWE$HUE{V^yqmW10eGw^9+KB;F}DBs0;$4{`$^ys~;-5Dx%{auSYj)ugv`Ntj1M0Sa1=lJ7oQl zWpuDd(_>#L>w2bQU;ePh)@`jfuqO1WnV%$r<^az;7 z&JNujCme~*xG7$CJF~xeN?zgqL>Y4vvdnAKk##sc<=|YA&nx1)xC8m?H9KtjlMS~d z#quo`K@w128UIdx*zRJQgO8IBI4gnc{(u9X<+JyMbjQOQqFwV^oSxq;uZj?!Zzt~7 z*WVBIF4u)gZ0#2skH0+Q^8I5xh`*SMtjm3nmu^3BpFwpoHQGxJIKuc$cXOp2u8X?W zkEBS}a>3zrhosXb&C$PgR%hGxE2j~F(M_CZbSFzKhzorIMUirH|EkDDvI;5F{%^7lVCd&Z&UKK`(XBGBew?vmkpE5dr}W@?NA+tT(kmoFDte~Ge0~&@ z$G&_DUlQJ&{Zmn~1AI5I$gEfPSWZG^6f1e+ZmZm~v_Aw($ZYvR7Z-m|D(^d(If~v~ zFS6~Q`(i5m9)7eFB=%h|u!yX!u0eF)SpOct-5|csLp*iWeZGf8MoIg}ZyKnh{5SgQ zcD-bLvG;l<*s`U}UWr1Edl<%cVo>i(PqvQMX9*uX64|Es6z$tm#*7@RE*7}bC777Y zoYz-68(N1r@;Bwxn&*X4fw7{u_m14zI`<&0e8L} zy5aOB+pRJ;@9Aemp!-_Nf9m{T{l+*J;vs&@6q0EE2?9Sc6e*}0FB6)s=j?>@k>Xx< z^fP#R{_|`pw(CpQz!>Hx66+bPQ9i$t7%Ktop#eKdeKGgB`s6NFzDuid|f$Vrbsto{6ON zMAKnFwYI!#o%&IX-}@d3M(xoU*!eBGDC#@NJkv|5Lg&Ss*S$o_+xj}s{Fm*pYvLX( zE62D-2l?R~-DgDSuI?kdcFk|LU&mbWWkSJd*%9rMAFOWsKTf8@i!V~=%Y+QAD2m8A;fLLUd#4Z7BQ< zYTfXrwx_DS1J(65S~(%PMm&atIofjM0=K3uQ|1F3z-k9{RJtkqZrW41$*r#G7>fHJvTDI%eBjxob@UlZr>h>_Df9fjQxB1g<%~!{861fttX7_|Cd}f3_|P z`7;jD?)J_!=?$AhWGIU63X}`mPIEui)fMAzPOx9T+_vJtZh3As(`&yqw{2fC?}q?h z)UHv?V1Fz(cS}tosuQny%o)4*NWA~_wv45^F|8Vhi~CP^v(rm;LK*G z$GLsE0QGVAYi9UbVr!jUSU&6iEGOK$}_Ir+1h zdg_Hey5yL3$-&7Fym-yt%I|U5D1D{PL+SmFd7E0

nOqV8(_Lyb~rk>vB$8tZNfD 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

BOXzubqW zL`p`Se|)(&{VdQ(@da3P@u39aK%fMudRQ#VO?vs#eH%}4N+O>^&Y9WF$iF6h{uQW< zHazP9^5m%gt5r$!9JL(X^89~StXMK)hXF|MnkhJ-RWlsio&4dIe6VJHAnh-H8e;jW zZvp9Hq4%=6Re_mS%;}*>FlzH#qF3NeJPI9AF-=JIn*cV^PObo9g07`9&91hm9oa`t- zKTRe-Gv4p>@?Jj2Z*53x=%63Z8uCRxAXj~lm+4ftmJhHF$-UR?y9IlOvwK93)_L<~ z4dWVj@`p7Eq>SP)kfj~bT3>2&E#$KhBVjFRe^G_!@>7LMmz}&CU>#xk>}>WJk=4uV z06}H?o$*wdiS<`T!Ar}wxRNet&WdFycW3!s9aVm4EjWb8Hzn1VKRHuP z<)w*UfQv0o+EKYA(DDqc!{xB~+AsO=fG>*h5Utb^4^06OmeASQ|MdGi%EUkzVy*VM zqB}XF%=^ek?et_}JsoyTjBGNQU8gQ-jV^wz>QXZ3Xu)ISfUge9Ds1i&DH zPYC?qH&HhsyFcBoASKc3YjzaxcUj?+{KFAaBqa00Fob>U>t!J8{FQCrBL4`5pHiVk zUPkN=b-xX1GY>=3V(3pkfo2@2LaMq%!NI&;@M-Bu|SXd;KdZ`uXyJqs!M#@4H7c9S#Uh-vTEnTh~f(fD1esBt#>B6qCDY z7}2K(})+7+#>$Ql3U56Q3FegYZ~cWU#*9dXC|&k6PE1vZ}eY$+wv|c+UM~Ct^F&|8zT=wM79GP)IlYBowO@R%WpwbMSo6cue2IJ zi6(K4tpt=mlvk{>*gf=w1c~~B2jUl?QrWW`r37@KIkC{_Ru*Ubp1f{yycMs&$jJ;^$FaDZbbXM;%pT8Om(F0 zy-JYUcJ)v=&?Gwu&Z&ZM+V?tSX&Am9y-F!C|2RrX#0qGohcc_n7F!3LRh)c`0Hhq% zGKX4q%xGiPM2qmDoWjSO+G!#E(0j^f4kdO`6Md05W*iA_AGFDLlvf=`1gK90XqUp0 zMO^C78A~1t<^<*mtzp(HAP}mWv-1$-f9EVKU20+c&f3x{&;-*byTfR zqx{d^Q}mczik}C`-?$@6?-g#9hi>=PopqQgE*zu3tMa!zVv3C8t29gN|Bl$~-xXx1 zqLha#<0v@qy{ETL;R3r+q&LQIQ&E5jA5~^9wjTGUSy`|MtvY)J{fs+9WZC7x1{+lf z>G$~|->zQs`KBFmHRO)Rd+WcxZKR>7Z#?B1t4+%%hl^ zGS@p+E#*mLxX`nr#h8P~IL%#soaRLsSYYLz2qQuXYfrnmwIs04HYvJ6tcJ!>=pvuW zM$&QNyPRk>b`zU>>ndMC-^)tXkpZen_*y8Of$|M4{5XgkJ^#@FM0+>Nmt%5>xvRxv z600S4mK%wod0l6Q%t6frheqeDSWM^w>MJ@d!R6m6mc@ZJSjG&8HGJLgdom+#>lE=` zc8vEZ`%Vb}%0267PL$ieKU9%F(ZIO@$qPIA6x8N2LK|o)JJxWJas;<3dtU45L3(CH zYU5oM)=PZ)K`%ANLKC;jI_^jq@VfIp!(Z}dy`x0*?&H99fQv~o=se-5C`s7c+UT`= zc$t0Xem^zx7cqK#H_)>e_-n*Hl!3dPAn6~cJ<}JZtJq!j)jhT`Uu+XlX383C`H=LF z)G+?r-e2M6wyqj!$(|6=b-_JHf9Po%86p3TBFK61(f4{tdjRvXp6NIELx~n3FG0Y8 z^_K(#)x`Bz5T$B+e%!ey2ekUEM9hY1247Y7&SUO%=sg(igV2h@gCeg2LT`t=F72`k zO?Bsl7V25*fL6ASRp{5bHKjqW=oq!lG>ORUveQMq7GNW}`A1;4tX015d}!Gzmp}D+ z%xT$56~*=W|I*|3Qd2}S{|a^~dHs)|qs2#iK}s~|n`9+n-pwnvh9NbClX)s^id`~| z1sigCa(pw80c%z8!!3|<=iEX*(z07qkl-F50b8LIu#^6mZEdz%c)E!2VPyBj?9Ewo zeE&zLXET&j>2s5b$B&<8_X9UKDW}AO{=J^*y&yO^F|p`aEAo5;QmXRcUp=Wr1UIRz zAxzOL`Qot{cv;^p)8Pv2w<7f02*Q}82=P{2y}H@CI@ro%xjh$kWO)S?u(ugxkecOI zw36IKL+&KwND`q>n5W;l*8+phOT?5n0GSi_AB>Oi=s>(^?9^*KY88q4D+^@>1-u)O ze2082m4j4!)IFm9y>#uSuao=3bX=J(H2^gLg||smJWD;zCF@L9;kEa62a(wnPK6*d z@kal!ZQlM=xrXZS6>DARhoq0lIw(~TR(0IhXvDx28YG**qxj*&wJ6d6rYMMmTT~&K zQk8z}j})!i&8~LZ#O(bd^@CZ-06}QHG^x$34R&QlBjn;G%A;&gq09nr!ka2c`4Xux zr!TJi2^E+IB$3>(LGLMQ=cwAR6zh+TdqTdrLx&Wlu(d?$_r%W`Eh}86&Q65rpkgZ; zwp6f)ErqC7T>`-*$SxqMhmXI#Dv&?4vW4+DQr}p49 z7M;sXL%X6+5EL<_tVl&+4p>@K)d{j2^GFza2ge;s@wBOp>_}U;aZCwEddx3LSfC~0 z!I+xp3gtm}bq8i=?75|lQ6slnPWrO{ebC3u!EX7kNubc%i|Id2kn=mH z^v!MRH8qyt7aeR*P7H6a0nTodSm&ID8xQX|O4AmF8XYiSglIH0jmfnE)kK0J3o&?t zqR?N{R>~(}$?dZNIHPNUMIZ~EcALN9d4nHO0_7u*VN#GcX~Qm9f8>rpVnZOZaEU;ehLZfg?O5bxFI zc4Xoo69G*0Kl>EKy`FoSwA^TZ+ejk0k9d0o7zfYn zvI?KNc=}sqCV9BX#`1DdASm@OzD7-}!>}P%)2i@(GL}MfXA;a%5gf5D(3d9FKkBH{ z!7|Y0K|_BIYy>WQ1+zrY_%_`mesUxDWHWgA?)^EtQ^6tpCJ7iCJ_Y-Y4+mLy9I>fP zCQ}kVcz9J3O;F#{)FW}`@{UzVoDL|4!XFu}c_vJnebJ!|se+27N~+1{R7!#Qg4O42 zv#mG7l0ehRs?T}z$tJ|y=4t&IHF)y19__SMGS~Lx`D;4l6XjT)*&=yGG+*=tu8v~r z?|$30ZOOp68@P9SaJk>_ev@t3@L-dM&AouowG6eoC=&zQFnB`6k{v8+9qPIMU3Qn~ z30s8Q#s@HFh9zUU%Te)B>dV_UAr875`u91g zXcEIO*|n{`m1-AC6XchXQIbp((0?k#A*uI{t|nyL9Q+{=KQu^2lfkk-50re~{rCDFA&8 zh`oAaaCK&v+}XxsY5v7#e<$xY#-|PKOlJyB2ALs+aS_aM~BpFzB}&_7Y2y#j4vR* z-X9viOqCD9>#e1c_rgl}k1xDy^qYaya|}KJ85ujMXzvpZUxrHFP71(@3hb3CuHw}o zOl$aFt*oSj-t?iDx!ZfHAx|g6iIfc}8Qk^#(%@@Gy1Js7K2xjla%eV{zLIC3Ue>vQ zZ$MMO+03l06iw9Vxq|aZaEw6=*6X41E?;-EW(!jkX&$TH(nkdF&ttq3UWie#s|9iR5Lk-lST`W*j0DZ zQUtz67Ni?JL!A)a14IgI5|ZOU@t zTD9)VQTYW-&nGDM>QZA?%F{ic7BVheSbf@G)o%p7>-d-#E^dFy5yl`B7-$Lq%MdGj z(6@%MO$Z5NVDL2UY1JE(-G9$BPIEyS-eb5P(I891a*P42+Fh?@47L97$q$K(4Ruan z6!5(19-^^?aIm;@%tK^Oga^l>%@X(pTHOu}=AEkVxuBqTJVIVJ2(Lq$imhHeOTEpE zV>pDdhi7(S{l?0O$My-DbFIe=^XVSdz#chGAZUD25)On+_%hFjoxA9A)uZ?M9R8O4 zVaF`+k#DmeSjHTabuQR6hbCZ_>>HuW7&;tD>;#*X$t9yJl+a4&iB`{m)Px z;xthUpD!PJ)!DX%|*YS%G!`iOmwb61U}ejwM6zW{dm@ra?@9`U<| z)gj$Si^ZU39AJ%hVn5wek|pb z9e4l^ne@fT#I-*&hq^2;As`yr;rBZLBUn0KX|hPxF#*}}1Ssq=?5>?h*n7|T-!VLj z3Mm>{abO&`9`vshUWxgk+6JUZeC33O1BHf{_5XdH^uK-_g-sC(o`3xY>4G1kBC)RwD7;V+7YR?M5VT!UqcjF2$AGEF@}>TTzJp4m)tK z<1lr?H*peWz9Ah{$lIjzne8Ts{sfvH{7-C%ggru*LtefQts7}=)6v)oG&CL=I=%$> z5iAWNzQ)k&_B9b*Y#NB#nxZ!_!p@oW)1K5nxfk*7)Xg&^)rv^ z-M|h@=FQ&+6AX?(`~J4s6~$<@HFBRt7iIMhC6Q7*U{{@M_=NoD0uxoetJ0bUojC5N zn{+E82@Mb=P2RZ@KeaOL%3uvQvxOuMzO@?W4Z*cPV}Nqo`%Cozee4Gz;=|}5s%JB3 z8K2SJ2sy5jtOY~MnU%92b|eNTO}Gj05rJt^nwC~#E`EhphR7Oe$5_NcV$a+D<>rdA zVWh#Zdll%7mZ6JYH{jl5?cm&bm|ou)dE{OwF|RA< z-Eu)saU+gub@D9O;%4)DACX21bc%UQ z2$n9FRW_UYAL^?0}C*bL%>325BVmznYk| z9DeS#j&|cZSKPgY{{J>AUt%Wf!Mx|rww^~gDa0MAVtqe#k?ZUvk7Dg-3bJmLjSLzu zujW$zpn#0k{0ZU742hD(pUYJ0usC{@^&U`vR~wK|q#YjV1h+EnziaWhH7>$`CZS4idRHe|I8p5besRAH61+D=U8s$q)wyw80|rxU|kS zGsU_$sO1GqETVoQBJQs4jCn!?h@JB4vSSx}u|j;wRo}SceF!;wztJdzdi-1UvZsi{ zvyfYx5W1(Y{cn+awQ_q#oLC&2uz622?L|$DqYR&Cer}ZU$&8EH^stL|=qEk8+txgJ zml}8X{QevKJWMJ&rfPL1#`Y|%dD;A`m%k!QXk!-*kUc|Jb#)5=aPXLR`0~=i)>fYU zh97pf6BpVkvktH`H-fY7S`0i6D0L?(4u?k}f8VHH$y_QGINZGDHFb0w($GK0GJoy0 zLoJX*6UC`=00_2s{+_R4C96MqMIiearabRfZkPh{S6g<=-{297xZvyMWZu-CNq(Do z_xQq2wpJl1JGx8h*Z!dFePgIBnxQ?l*F8n{j*hhtl%rM#dfVcU8J7hBi{k85W{_Q} zI#T-N^5qfP+5FBzms!MFxA2CuG^9zR)b?mrHVh<(8>) zL}_>8yfH`ZjyBRa&q)jnG&-f z-W`E-D>@!Abyt7h1quzjvy|Ac)D^39i-T?U-ptr77nS#v->)WEw-&das{briA%2o?XUje}r|c!+afJw6$pVIa zYn@qqIr?rL;v~=-y7g-G zDW&^f@{K_NL|9x(e|8$^{#WKcn@z1# zHCG;%!jM~`u-zZt%h!qTXoc1X1&;j!BcoLcydj`SBU7kfxu88?`51G$;I1GQYaPYQ<{2E4bR(%1;)0DGsNqp1)jJ#!P0*k;O8f3b0yi5h~0_U_Bxq?XtUbKuJnsl9)85;OcY3sOMhw04Y4 z7dURlGWu~F-fgQwF8GmM$?)GicHetG>yQ?MOf8ODy)2orrF}ts)D>4-tmsRJwD=}z zpmMS!QX8T5;em#k1dmV)b@6GU;r$zRD|p(~dt$6MnW|Y8+rizelT8D_BS>iLm_ts8 zG>iOX{)C^!K2TipAGa&%akW)~5Q;X{a_4B`2ik;StdT)UD&$h!`kQA-Af^OWsf~93 z-@M@W`jm{NWqbwxZ5$ae{3A%Ha8t7W3PY$ zWZ9Jr0As^1?o5Ma6`hOq)3w3S$%pVf3L7KizLwOU#E!CQLwU5xmfdR<*lZG3q1}x< z%&Hax&ng+VY+ysm+YkNOG9r8_239|i-gpjv%C?h6#bI>4&WtoFrxW5UDJLIt9@Gy^ z1EfE4d#T`Pz77EtTWj%nJ$i*v z`;O0`b|DGxi-J|15V`DkJPb^YR>`J2XgJTLPspA#ix&JBUR~MZWHsiD190IuWF=^# zK%wL!M#MbgOLsVBxMzTNVp*n2`Y3;9tg_$!PL1VnoaW{gz|SQHuzru>X-(bed69m4 zKaYbn)a%zSmcr$-N_+xV(K0DV0irQx-!fq1P7zA~luTLZUW6iiLJxcsDLZmdktJwMIRzyI(w-{7Tbh-Qg;JVn1=If(5BWxCk(5Z+A15*wSHjD$I4be ziRrgCF2$ZfJgCoJZUq%*#f+0)Y>vQe2;QZ{0EBcl9C2w{ZbaTk=@p7w?jsVo)DBN4 zQu<`1c=yMe7c)+m@D?7!Mhrc&_ z)ij$Op!&@HUXlE|^~c@LqfPedn_z8wNwIA7m^harze(W?&4}FT;>E2B}J1PS4Vx%s5B`Aeh@c=H{eXP@h;G#N-Xe zdd?>WD9wPzK-1lm6vSL+Gi*0`{vnd2pSJsV9<*0n2x0S_T%iGSoj@)DN8f}G3!Nhn z`h(PIEu0-_NAlUoG3`0Am2av(#pTubbkwn-O~MHrP!LF-)OI#T6KC@TF*-9BL}#P+3KMB(h!%^!I9aH9OUz5GpZ&9FNm3N=CFrR8 z3v+!Jb%P3I4==WA6Do{jOuP4@ldgeZ*)Vy#Yj6SdQ9FkQaMdECI%2NVTS^qD^Ev8c znOY3BJ*6wEFGqU`&yL9aYHQV&XpRo9Fa;7mj>|coj!ZKX{?MSa!v~@RTe$!J3~HXKw(l684a`MwH6dU(24kt?^Q) z+)Ze|nt8^m@aK|GX~7TBU#R_ip_W#9?qLV72P|hiy}P;VvogZFJ+cvgg$+MMMhZH+ zRz#?bIili3nY%OSb@imcq(HY8Eaxc-MO-*m$b;%s0gNX`ewv3!_lIC zT6SsmV_=f0|A8a3o7c3{z*1Rw=a|HQ&@yp~X153ZfqA6IOuWM22^Vp9s6+jxI?Kk; zS`{<;)m=Kni-VN~$coQSRYF&liEobU$PHEfYr&i{2iH?R2Tr=jb&&_!wJs0;Yzt1x zZn)purJ=G6w&f~TC$N!^;YyZ)wd@EgsH>vphhNWwVFoXsgQD^l|AROx5pN$egl78d7%<*2sH2m!z z`^+*!u7)@Ut)E$tPI|Hv=v$kumV^%-$Of;wdtc6H#A~LWZvvtna3bzZ_k(+ik=aq~ z@NDGQs&?sHqh2LboAZp5D>46UB9mL3Ej(hm;R23RRr2i~TJ7LR#I-;;zFvuSU~JRCZh$ z@l)0I`8#DbpnGX+lNXZ~QsX}{;8oJAsE|bkp~392c(0A$!|V>3)-w7R8(SQ0icYND zxehs2kDIcMTKLb}3uAwvSMxi7wfc`Op^MC9Bt483CgZpa^-#;(HH!*d!ZzseE^7~3 z7nj$g*~^F?DwHLfOaHYc;qc6dGb#_nCrFuMJe|Nm`O|PA=P%Dc`p~aK*z~z6$)sb~ zhBlN_ai(52e$lB5xTEmboOpZ88Yyf{KltfQ$ysm@O-aY8*cYYw*LNK{tsgeU|8dPL zBT7$CYD~CIbd-81>V{WqfVakP5Z{EHFuqO0hxt$%ErozB#cOEq37u|e6rQ4)*Ss)a z{BSagKJIx&Va#L;xkYyxDes(_NbHLWstKn-17k0Ef)m@38F*4dl1CEA>RY|**m{$= z&HdFa)$90SO+mbT8y@eDFo6ZdVJXRRb%zdKd-iFNYkz*lF3*vgf6Z7jXwvX{@U1s{ z|A0)L#^gu4;7Y%Rbv|P#dF6`Nv^zUNi+HA~`}Hp^Nrm}sGoL%hT>lG3KtWi_UWf7c z`&56SXWn*o7nPUMMi~M)n;{ez%jP;?(|F2%`mJPX`NksxTtm+k+%WgBF^7)>iFku zgr4`c#lX{(U%yiyA%FRVz;sUIUTvXASKcf9YZ$zF!8bMTI<320vN#8CHS@K6t?`STq#^OGA76W!Y;RVxhgag>5BnGC zr;7q{Gr=+R|EKBtf3#=+(;)4 literal 0 HcmV?d00001 diff --git a/resources/audio.cwav b/resources/audio.cwav new file mode 100644 index 0000000000000000000000000000000000000000..fd185d208000b630331e07146296d7ce2bdbf5c6 GIT binary patch literal 57560 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 CYq?_p literal 0 HcmV?d00001 diff --git a/resources/icon.png b/resources/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e2210b0cb6e7d45f782c56724bed163fcb8c0a13 GIT binary patch literal 3007 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 BftUaQ literal 0 HcmV?d00001 diff --git a/resources/logo.bcma.lz b/resources/logo.bcma.lz new file mode 100644 index 0000000000000000000000000000000000000000..dd9db8cda2c5fa0ba767e5f25dda002579af78b8 GIT binary patch literal 8192 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 D6|7Yq literal 0 HcmV?d00001 diff --git a/romfs/bottom.png b/romfs/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..454841592ef6287439b3d2a23f3250ce94769b97 GIT binary patch literal 22786 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

gS0QWrh0R4d#khHx^8M+)G+ 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 literal 0 HcmV?d00001 diff --git a/romfs/top.png b/romfs/top.png new file mode 100644 index 0000000000000000000000000000000000000000..3927bc968820d8460d3c30eef1aee1f7d8d69a89 GIT binary patch literal 44292 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 +#include // for mallinfo() +#include // for sbrk() + +extern u8 *fake_heap_end; // current heap start +extern u8 *fake_heap_start; // current heap end + +u8 *getHeapStart(void) +{ + return fake_heap_start; +} + +u8 *getHeapEnd(void) +{ + return (u8*)sbrk(0); +} + +u8 *getHeapLimit(void) +{ + return fake_heap_end; +} + +// returns the amount of used memory in bytes +int getMemUsed(void) +{ + struct mallinfo mi = mallinfo(); + return mi.uordblks; +} + +// returns the amount of free memory in bytes +int getMemFree(void) +{ + struct mallinfo mi = mallinfo(); + return mi.fordblks + (getHeapLimit() - getHeapEnd()); +} diff --git a/source/allocator/newlibHeap.h b/source/allocator/newlibHeap.h new file mode 100644 index 0000000..a54c80b --- /dev/null +++ b/source/allocator/newlibHeap.h @@ -0,0 +1,18 @@ +#ifndef NEWLIBHEAP_H +#define NEWLIBHEAP_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "3ds/types.h" + +u8 *getHeapStart(void); +u8 *getHeapEnd(void); +u8 *getHeapLimit(void); +int getMemUsed(void); +int getMemFree(void); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/source/clock.c b/source/clock.c new file mode 100644 index 0000000..651fc19 --- /dev/null +++ b/source/clock.c @@ -0,0 +1,26 @@ +#include "clock.h" + +#define SYSCLOCK_SOC (16756991) +#define SYSCLOCK_ARM9 (SYSCLOCK_SOC * 8) +#define SYSCLOCK_ARM11 (SYSCLOCK_ARM9 * 2) +#define SYSCLOCK_ARM11_NEW (SYSCLOCK_ARM11 * 3) + +#define CPU_TICKS_PER_MSEC (SYSCLOCK_ARM11 / 1000.0) +#define CPU_TICKS_PER_USEC (SYSCLOCK_ARM11 / 1000000.0) + + +u64 Timer_Restart(void) +{ + return (svcGetSystemTick()); +} +u64 getTimeInMsec(u64 timer) { + return timer / CPU_TICKS_PER_MSEC; +} +bool Timer_HasTimePassed(float nbmsecToWait, u64 timer) +{ + u64 seconds = (u64)(nbmsecToWait * CPU_TICKS_PER_MSEC); + u64 current = svcGetSystemTick(); + u64 diff = current - timer; + + return (diff >= seconds); +} \ No newline at end of file diff --git a/source/clock.h b/source/clock.h new file mode 100644 index 0000000..b5347d9 --- /dev/null +++ b/source/clock.h @@ -0,0 +1,6 @@ +#pragma once +#include <3ds.h> + +u64 Timer_Restart(void); +bool Timer_HasTimePassed(float nbmsecToWait, u64 timer); +u64 getTimeInMsec(u64 timer); \ No newline at end of file diff --git a/source/draw.c b/source/draw.c new file mode 100644 index 0000000..746b582 --- /dev/null +++ b/source/draw.c @@ -0,0 +1,375 @@ +#include "draw.h" + +static DVLB_s *vshader_dvlb; +static shaderProgram_s program; +static int uLoc_projection; +static textVertex_s *textVtxArray; +static int textVtxArrayPos; +static drawTarget_t top; +static drawTarget_t bottom; +static bool frameStarted = false; +static gfxScreen_t currentScreen = -1; +static cursor_t cursor[2] = { { 10, 10 },{ 10, 10 } }; + +#define TEXT_VTX_ARRAY_COUNT (8 * 1024) + +#define TEX_MIN_SIZE 64 + +//Grabbed from: http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 +unsigned int nextPow2(unsigned int v) +{ + v--; + v |= v >> 1; + v |= v >> 2; + v |= v >> 4; + v |= v >> 8; + v |= v >> 16; + v++; + return (v >= TEX_MIN_SIZE ? v : TEX_MIN_SIZE); +} + +static void addTextVertex(float vx, float vy, float vz, float tx, float ty) +{ + textVertex_s *vtx; + + vtx = &textVtxArray[textVtxArrayPos++]; + vtx->position[0] = vx; + vtx->position[1] = vy; + vtx->position[2] = 0.0f; + vtx->texcoord[0] = tx; + vtx->texcoord[1] = ty; +} + +void printVertex(textVertex_s *vtx) +{ + printf("Vtx: pos[0] %f, pos[1] %f pos[2] %f, tx[0] %f, tx[1] %f\n", + vtx->position[0], + vtx->position[1], + vtx->position[2], + vtx->texcoord[0], + vtx->texcoord[1] + ); +} + +static void resetC3Denv() { + C3D_TexEnv *env; + for (int i = 0; i < 4; i++) { + env = C3D_GetTexEnv(i); + TexEnv_Init(env); + } +} + +static void bindImageGreyScale(C3D_Tex *texture, u32 texture_color) { + //((0.3 * R) + (0.59 * G) + (0.11 * B)). -> 0xFF1C964C + C3D_TexEnv *env; + u32 greyMask = 0xFF1C964C; + resetC3Denv(); + + C3D_TexBind(0, texture); + env = C3D_GetTexEnv(0); + C3D_TexEnvSrc(env, C3D_RGB, GPU_TEXTURE0, GPU_CONSTANT, 0); + C3D_TexEnvSrc(env, C3D_Alpha, GPU_TEXTURE0, 0, 0); + C3D_TexEnvOp(env, C3D_Both, 0, 0, 0); + C3D_TexEnvFunc(env, C3D_RGB, GPU_MODULATE); + C3D_TexEnvFunc(env, C3D_Alpha, GPU_REPLACE); + C3D_TexEnvColor(env, texture_color); + env = C3D_GetTexEnv(1); + C3D_TexEnvSrc(env, C3D_RGB, GPU_PREVIOUS, GPU_CONSTANT, 0); + C3D_TexEnvSrc(env, C3D_Alpha, GPU_PREVIOUS, 0, 0); + C3D_TexEnvOp(env, C3D_Both, 0, 0, 0); + C3D_TexEnvFunc(env, C3D_RGB, GPU_MODULATE); + C3D_TexEnvFunc(env, C3D_Alpha, GPU_REPLACE); + C3D_TexEnvColor(env, greyMask); + C3D_TexEnvBufUpdate(C3D_RGB, 0b0010); + env = C3D_GetTexEnv(2); + C3D_TexEnvSrc(env, C3D_RGB, GPU_PREVIOUS, GPU_PREVIOUS, 0); + C3D_TexEnvSrc(env, C3D_Alpha, GPU_PREVIOUS, 0, 0); + C3D_TexEnvOp(env, C3D_RGB, GPU_TEVOP_RGB_SRC_R, GPU_TEVOP_RGB_SRC_G, 0); + C3D_TexEnvOp(env, C3D_Alpha, 0, 0, 0); + C3D_TexEnvFunc(env, C3D_RGB, GPU_ADD); + C3D_TexEnvFunc(env, C3D_Alpha, GPU_REPLACE); + env = C3D_GetTexEnv(3); + C3D_TexEnvSrc(env, C3D_RGB, GPU_PREVIOUS, GPU_PREVIOUS_BUFFER, 0); + C3D_TexEnvSrc(env, C3D_Alpha, GPU_PREVIOUS, 0, 0); + C3D_TexEnvOp(env, C3D_RGB, 0, GPU_TEVOP_RGB_SRC_B, 0); + C3D_TexEnvOp(env, C3D_Alpha, 0, 0, 0); + C3D_TexEnvFunc(env, C3D_RGB, GPU_ADD); + C3D_TexEnvFunc(env, C3D_Alpha, GPU_REPLACE); +} + +static void bindTexture(C3D_Tex *texture, u32 texture_color) +{ + C3D_TexEnv *env; + resetC3Denv(); + + C3D_TexBind(0, texture); + env = C3D_GetTexEnv(0); + C3D_TexEnvBufUpdate(C3D_RGB, 0); + C3D_TexEnvSrc(env, C3D_RGB, GPU_TEXTURE0, GPU_CONSTANT, 0); + C3D_TexEnvSrc(env, C3D_Alpha, GPU_TEXTURE0, 0, 0); + C3D_TexEnvOp(env, C3D_Both, 0, 0, 0); + C3D_TexEnvFunc(env, C3D_RGB, GPU_MODULATE); + C3D_TexEnvFunc(env, C3D_Alpha, GPU_REPLACE); + C3D_TexEnvColor(env, texture_color); +} + +void setSpritePos(sprite_t *sprite, float posX, float posY) +{ + if (!sprite) return; + sprite->posX = posX; + sprite->posY = posY; +} + +void drawSprite(sprite_t *sprite) +{ + float height; + float width; + float u; + float v; + float x; + float y; + int arrayIndex; + C3D_Tex *texture; + + if (!sprite || sprite->isHidden) return; + texture = &sprite->texture; + height = sprite->height; + width = sprite->width; + x = sprite->posX; + y = sprite->posY; + u = width / (float)texture->width; + v = height / (float)texture->height; + + width = floor(width * sprite->amount); + u *= sprite->amount; + + C3D_BufInfo *bufInfo = C3D_GetBufInfo(); + BufInfo_Init(bufInfo); + BufInfo_Add(bufInfo, textVtxArray, sizeof(textVertex_s), 2, 0x10); + //Set the vertices + arrayIndex = textVtxArrayPos; + addTextVertex(x, y + height, sprite->depth, 0.0f, v); //left bottom + addTextVertex(x + width, y + height, sprite->depth, u, v); //right bottom + addTextVertex(x, y, sprite->depth, 0.0f, 0.0f); //left top + addTextVertex(x + width, y, sprite->depth, u, 0.0f); //right top + + //Bind the sprite's texture + if (sprite->isGreyedOut) { + bindImageGreyScale(texture, sprite->drawColor); + } + else { + bindTexture(texture, sprite->drawColor); + } + + //Draw + C3D_DrawArrays(GPU_TRIANGLE_STRIP, arrayIndex, 4); +} + +sprite_t *newSprite(int width, int height) +{ + sprite_t *sprite; + C3D_Tex *texture; + bool result; + + //Alloc the sprite + sprite = (sprite_t *)calloc(1, sizeof(sprite_t)); + if (!sprite) goto allocError; + texture = &sprite->texture; + + //Create and init the sprite's texture + result = C3D_TexInit(texture, nextPow2(width), nextPow2(height), GPU_RGBA8); + if (!result) goto texInitError; + //C3D_TexSetWrap(texture, GPU_CLAMP_TO_BORDER, GPU_CLAMP_TO_BORDER); + texture->param = GPU_TEXTURE_MAG_FILTER(GPU_LINEAR) | GPU_TEXTURE_MIN_FILTER(GPU_LINEAR) + | GPU_TEXTURE_WRAP_S(GPU_CLAMP_TO_BORDER) | GPU_TEXTURE_WRAP_T(GPU_CLAMP_TO_BORDER); + + sprite->width = (float)width; + sprite->height = (float)height; + sprite->drawColor = 0xFFFFFFFF; + sprite->isGreyedOut = false; + sprite->isHidden = false; + sprite->depth = 0.0f; + sprite->amount = 1.f; + return (sprite); +texInitError: + free(sprite); +allocError: + return (NULL); +} + +void deleteSprite(sprite_t *sprite) +{ + if (!sprite) return; + C3D_TexDelete(&sprite->texture); + free(sprite); + sprite = NULL; +} + +static void sceneInit(void) +{ + int i; + TGLP_s *glyphInfo; + C3D_Tex *tex; + C3D_AttrInfo *attrInfo; + + // Load the vertex shader, create a shader program and bind it + vshader_dvlb = DVLB_ParseFile((u32*)vshader_shbin, vshader_shbin_len); + shaderProgramInit(&program); + shaderProgramSetVsh(&program, &vshader_dvlb->DVLE[0]); + C3D_BindProgram(&program); + + // Get the location of the uniforms + uLoc_projection = shaderInstanceGetUniformLocation(program.vertexShader, "projection"); + + // Configure attributes for use with the vertex shader + attrInfo = C3D_GetAttrInfo(); + AttrInfo_Init(attrInfo); + AttrInfo_AddLoader(attrInfo, 0, GPU_FLOAT, 3); // v0=position + AttrInfo_AddLoader(attrInfo, 1, GPU_FLOAT, 2); // v1=texcoord + + // Compute the projection matrix + Mtx_OrthoTilt(&top.projection, 0.0f, 400.0f, 240.0f, 0.0f, 0.0f, 1.0f, true); + Mtx_OrthoTilt(&bottom.projection, 0.0f, 320.0f, 240.0f, 0.0f, 0.0f, 1.0f, true); + + // Configure depth test to overwrite pixels with the same depth (needed to draw overlapping glyphs) + C3D_DepthTest(true, GPU_GEQUAL, GPU_WRITE_ALL); + + // Create the text vertex array + textVtxArray = (textVertex_s*)linearAlloc(sizeof(textVertex_s)*TEXT_VTX_ARRAY_COUNT); +} + +static void sceneExit(void) +{ + // Free the textures + + // Free the shader program + shaderProgramFree(&program); + DVLB_Free(vshader_dvlb); +} + +void drawInit(void) +{ + C3D_RenderTarget *target; + + //Init Citro3D + C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); + + // Initialize the top render target + target = C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); + C3D_RenderTargetSetClear(target, C3D_CLEAR_ALL, CLEAR_COLOR, 0); + C3D_RenderTargetSetOutput(target, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); + top.target = target; + + // Initialize the bottom render target + target = C3D_RenderTargetCreate(240, 320, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); + C3D_RenderTargetSetClear(target, C3D_CLEAR_ALL, CLEAR_COLOR, 0); + C3D_RenderTargetSetOutput(target, GFX_BOTTOM, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); + bottom.target = target; + + // Initialize the scene + sceneInit(); +} + +void drawEndFrame(void) +{ + if (frameStarted) + { + C3D_FrameEnd(0); + frameStarted = false; + } +} + +void drawExit(void) +{ + sceneExit(); + C3D_Fini(); +} + +void setTextColor(u32 color) +{ +#ifndef CITRA + C3D_TexEnv *env; + + env = C3D_GetTexEnv(0); + C3D_TexEnvSrc(env, C3D_RGB, GPU_CONSTANT, 0, 0); + C3D_TexEnvSrc(env, C3D_Alpha, GPU_TEXTURE0, GPU_CONSTANT, 0); + C3D_TexEnvOp(env, C3D_Both, 0, 0, 0); + C3D_TexEnvFunc(env, C3D_RGB, GPU_REPLACE); + C3D_TexEnvFunc(env, C3D_Alpha, GPU_MODULATE); + C3D_TexEnvColor(env, color); +#endif +} + +void updateScreen(void) +{ + if (frameStarted) + C3D_FrameEnd(0); + else + frameStarted = true; + C3D_FrameBegin(C3D_FRAME_SYNCDRAW); + textVtxArrayPos = 0; + cursor[0] = (cursor_t){ 10, 10 }; + cursor[1] = (cursor_t){ 10, 10 }; + currentScreen = -1; +} + +void setScreen(gfxScreen_t screen) +{ + if (screen == currentScreen) return; + currentScreen = screen; + if (!frameStarted) + { + C3D_FrameBegin(C3D_FRAME_SYNCDRAW); + frameStarted = true; + } + if (screen == GFX_TOP) + { + C3D_FrameDrawOn(top.target); + C3D_FVUnifMtx4x4(GPU_VERTEX_SHADER, uLoc_projection, &top.projection); + } + else if (screen == GFX_BOTTOM) + { + C3D_FrameDrawOn(bottom.target); + C3D_FVUnifMtx4x4(GPU_VERTEX_SHADER, uLoc_projection, &bottom.projection); + } + else return; +} +/* +void Printf(u32 color, u32 flags, char *text, ...) +{ + //TODO: Find the best size for BOLD and SKINNY + char buf[4096]; + va_list vaList; + float posX; + float posY; + float sizeX; + float sizeY; + + if (flags) + { + //Set the font size + if (flags & BIG) sizeX = sizeY = 1.0f; + else if (flags & SMALL) sizeX = sizeY = 0.35f; + else sizeX = sizeY = 0.5f; + //Set a style + if (flags & BOLD) + { + sizeX = 0.75f; + sizeY = 0.5f; + } + else if (flags & SKINNY) + { + sizeX = 0.5f; + sizeY = 0.75f; + } + } + else + sizeX = sizeY = 0.5f; + va_start(vaList, text); + vsnprintf(buf, 4096, text, vaList); + posX = cursor[currentScreen].posX; + posY = cursor[currentScreen].posY; + setTextColor(color); + renderText(posX, posY, sizeX, sizeY, false, buf, &cursor[currentScreen]); + va_end(vaList); +}*/ diff --git a/source/draw.h b/source/draw.h new file mode 100644 index 0000000..7d90eef --- /dev/null +++ b/source/draw.h @@ -0,0 +1,112 @@ +#ifndef DRAW_H +#define DRAW_H +#include +#include +#include +#include +#include +#include <3ds.h> +#include + +typedef struct sprite_s +{ + C3D_Tex texture; + float posX; + float posY; + float height; + float width; + u32 drawColor; + bool isGreyedOut; + bool isHidden; + float depth; + float amount; // from 0 to 1 +} sprite_t; + +typedef struct rectangle_s +{ + /* herited from drawableObject_t */ + bool(*draw)(void *self); + + float posX; + float posY; + float width; + float height; + sprite_t* sprite; + float amount; //Range from 0 to 1 + float depth; +} rectangle_t; + +#include "drawableObject.h" + +// These headers are generated by the build process +#include "vshader_shbin.h" + +//#define CITRA //Citra doesn't like the setTextColor + +#define CLEAR_COLOR 0x68B0D8FF +#define SCREEN_POS(x, y) (screenPos_t)((x << 16) | (y)) +#define POS_X(screenPos) (float)(screenPos >> 16) +#define POS_Y(screenPos) (float)(screenPos & 0xFFFF) + +// Used to transfer the final rendered display to the framebuffer +#define DISPLAY_TRANSFER_FLAGS \ + (GX_TRANSFER_FLIP_VERT(0) | GX_TRANSFER_OUT_TILED(0) | GX_TRANSFER_RAW_COPY(0) | \ + GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGB8) | \ + GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO)) + +// Used to convert textures to 3DS tiled format +// Note: vertical flip flag set so 0,0 is top left of texture +#define TEXTURE_TRANSFER_FLAGS \ + (GX_TRANSFER_FLIP_VERT(1) | GX_TRANSFER_OUT_TILED(1) | GX_TRANSFER_RAW_COPY(0) | \ + GX_TRANSFER_IN_FORMAT(GX_TRANSFER_FMT_RGBA8) | GX_TRANSFER_OUT_FORMAT(GX_TRANSFER_FMT_RGBA8) | \ + GX_TRANSFER_SCALING(GX_TRANSFER_SCALE_NO)) + +typedef struct +{ + float position[3]; + float texcoord[2]; +} textVertex_s; + +typedef struct drawTarget_s +{ + C3D_RenderTarget *target; + C3D_Mtx projection; +} drawTarget_t; +typedef struct +{ + float posX; + float posY; +} cursor_t; + + +typedef u32 screenPos_t; + +void drawInit(void); +void drawExit(void); +void drawEndFrame(void); +void setScreen(gfxScreen_t screen); +void updateScreen(void); + +sprite_t *newSprite(int width, int height); +Result newSpriteFromPNG(sprite_t **out, const char *filename); +void deleteSprite(sprite_t *sprite); +void setSpritePos(sprite_t *sprite, float posX, float posY); +void drawSprite(sprite_t *sprite); + +#define COLOR_BLUE 0xFFFF0000 +#define COLOR_RED 0xFF0000FF +#define COLOR_GREEN 0xFF00FF00 +#define COLOR_BLANK 0xFFFFFFFF +#define COLOR_BLACK 0xFF000000 +#define COLOR_GREY 0xFF989898 +#define COLOR_ORANGE 0xFF00A5FF +#define COLOR_LIMEGREEN 0xFF32CD32 +#define COLOR_SALMON 0xFF7280FA +#define COLOR_SILVER 0xFFC0C0C0 +#define COLOR_CORAL 0xFF507FFF + +#define COLOR_DARKGREEN 0xFF006400 + + + +#endif \ No newline at end of file diff --git a/source/drawableObject.c b/source/drawableObject.c new file mode 100644 index 0000000..de81e49 --- /dev/null +++ b/source/drawableObject.c @@ -0,0 +1,53 @@ +#include "drawableObject.h" +#include "draw.h" + +backgroundScreen_t *newBackgroundObject(sprite_t *background) +{ + backgroundScreen_t *ret; + + ret = (backgroundScreen_t *)calloc(1, sizeof(backgroundScreen_t)); + if (!ret) goto error; + + if (background) ret->background = background; + ret->draw = drawBackground; + return (ret); +error: + return (NULL); +} + +bool drawBackground(void *self) +{ + backgroundScreen_t *bg; + + if (!self) goto error; + bg = (backgroundScreen_t *)self; + drawSprite(bg->background); +error: + return (false); +} + +drawableScreen_t *newDrawableScreen(backgroundScreen_t *background) +{ + drawableScreen_t *ret; + + ret = (drawableScreen_t *)calloc(1, sizeof(drawableScreen_t)); + if (!ret) goto error; + if (background) ret->background = background; + ret->draw = drawScreen; + return (ret); +error: + return (NULL); +} + +bool drawScreen(void *self) +{ + drawableScreen_t *screen; + + if (!self) goto error; + screen = (drawableScreen_t *)self; + if (screen->background) + screen->background->draw(screen->background); + return (true); +error: + return (false); +} \ No newline at end of file diff --git a/source/drawableObject.h b/source/drawableObject.h new file mode 100644 index 0000000..4356f5b --- /dev/null +++ b/source/drawableObject.h @@ -0,0 +1,39 @@ +#ifndef DRAWABLEOBJECT_H +#define DRAWABLEOBJECT_H +#define MAX_ELEMENTS 15 + +#include "draw.h" + +typedef struct drawableObject_s +{ + bool (*draw)(void *self); +} drawableObject_t; + +typedef struct backgroundScreen_s +{ + /* herited from drawableObject_t */ + bool (*draw)(void *self); + + sprite_t *background; + sprite_t *headerText; + sprite_t *footerText; + +} backgroundScreen_t; + +typedef struct drawableScreen_s +{ + /* herited from drawableObject_t */ + bool (*draw)(void *self); + + backgroundScreen_t *background; + int elementsCount; + int elementList[MAX_ELEMENTS]; +} drawableScreen_t; + +backgroundScreen_t *newBackgroundObject(sprite_t *background); +bool drawBackground(void *self); + +drawableScreen_t *newDrawableScreen(backgroundScreen_t *background); +bool drawScreen(void *self); + +#endif diff --git a/source/graphics.c b/source/graphics.c new file mode 100644 index 0000000..3ed1253 --- /dev/null +++ b/source/graphics.c @@ -0,0 +1,72 @@ +#include "graphics.h" +#include "drawableObject.h" + + +sprite_t *bottomSprite = NULL; +sprite_t *topSprite = NULL; +drawableScreen_t *botScreen = NULL; +drawableScreen_t *topScreen = NULL; + +void initUI(void) +{ + backgroundScreen_t *bg; + + newSpriteFromPNG(&topSprite, "romfs:/top.png"); + newSpriteFromPNG(&bottomSprite, "romfs:/bottom.png"); + + setSpritePos(topSprite, 0, 0); + setSpritePos(bottomSprite, 0, 0); + + topSprite->drawColor = 0xFF000000; + bottomSprite->drawColor = 0xFF000000; + + bg = newBackgroundObject(bottomSprite); + botScreen = newDrawableScreen(bg); + bg = newBackgroundObject(topSprite); + topScreen = newDrawableScreen(bg); + + updateUI(); +} + +void setExitMode() { + botScreen->background->background->isGreyedOut = true; + topScreen->background->background->isGreyedOut = true; +} + +void handleFadeIn(s64 time, u64 tot) { + float ratio = (float)(tot - time) / tot; + u8 col = (u8)(ratio * 0xff); + u32 finalcol = (0xFF << 24) | (col << 16) | (col << 8) | (col); + topScreen->background->background->drawColor = finalcol; + botScreen->background->background->drawColor = finalcol; +} + + +void exitUI(void) +{ + deleteSprite(bottomSprite); + deleteSprite(topSprite); +} + +static inline void drawUITop(void) +{ + setScreen(GFX_TOP); + + topScreen->draw(topScreen); +} + +static inline void drawUIBottom(void) +{ + setScreen(GFX_BOTTOM); + + botScreen->draw(botScreen); +} + +int updateUI(void) +{ + hidScanInput(); + drawUITop(); + drawUIBottom(); + updateScreen(); + return (1); +} \ No newline at end of file diff --git a/source/graphics.h b/source/graphics.h new file mode 100644 index 0000000..cd3780a --- /dev/null +++ b/source/graphics.h @@ -0,0 +1,23 @@ +#ifndef GRAPHICS_H +#define GRAPHICS_H + +#include "draw.h" +#include "main.h" + +#define STACKSIZE 0x1000 + +void initUI(void); +void exitUI(void); +int updateUI(void); +void setExitMode(); +void handleFadeIn(s64 time, u64 tot); + + +#define newAppTop(...) newAppInfoEntry(appTop, __VA_ARGS__) +#define removeAppTop() removeAppInfoEntry(appTop) +#define clearTop(update) clearAppInfo(appTop, update) + +#define TRACE() {newAppTop(DEFAULT_COLOR, SMALL, "%s:%d",__FUNCTION__, __LINE__); svcSleepThread(1000000000); updateUI(); svcSleepThread(1000000000);} +#define XTRACE(str, ...) {newAppTop(DEFAULT_COLOR, SMALL, str, __VA_ARGS__); updateUI(); svcSleepThread(500000000);} + +#endif \ No newline at end of file diff --git a/source/json/LICENSE b/source/json/LICENSE new file mode 100644 index 0000000..1aee375 --- /dev/null +++ b/source/json/LICENSE @@ -0,0 +1,26 @@ + + Copyright (C) 2012, 2013 James McLaughlin et al. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + diff --git a/source/json/json.c b/source/json/json.c new file mode 100644 index 0000000..6012bad --- /dev/null +++ b/source/json/json.c @@ -0,0 +1,1011 @@ +/* vim: set et ts=3 sw=3 sts=3 ft=c: + * + * Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved. + * https://github.com/udp/json-parser + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "json.h" + +#ifdef _MSC_VER + #ifndef _CRT_SECURE_NO_WARNINGS + #define _CRT_SECURE_NO_WARNINGS + #endif +#endif + +const struct _json_value json_value_none; + +#include +#include +#include +#include + +typedef unsigned int json_uchar; + +static unsigned char hex_value (json_char c) +{ + if (isdigit(c)) + return c - '0'; + + switch (c) { + case 'a': case 'A': return 0x0A; + case 'b': case 'B': return 0x0B; + case 'c': case 'C': return 0x0C; + case 'd': case 'D': return 0x0D; + case 'e': case 'E': return 0x0E; + case 'f': case 'F': return 0x0F; + default: return 0xFF; + } +} + +typedef struct +{ + unsigned long used_memory; + + unsigned int uint_max; + unsigned long ulong_max; + + json_settings settings; + int first_pass; + + const json_char * ptr; + unsigned int cur_line, cur_col; + +} json_state; + +static void * default_alloc (size_t size, int zero, void * user_data) +{ + return zero ? calloc (1, size) : malloc (size); +} + +static void default_free (void * ptr, void * user_data) +{ + free (ptr); +} + +static void * json_alloc (json_state * state, unsigned long size, int zero) +{ + if ((state->ulong_max - state->used_memory) < size) + return 0; + + if (state->settings.max_memory + && (state->used_memory += size) > state->settings.max_memory) + { + return 0; + } + + return state->settings.mem_alloc (size, zero, state->settings.user_data); +} + +static int new_value (json_state * state, + json_value ** top, json_value ** root, json_value ** alloc, + json_type type) +{ + json_value * value; + int values_size; + + if (!state->first_pass) + { + value = *top = *alloc; + *alloc = (*alloc)->_reserved.next_alloc; + + if (!*root) + *root = value; + + switch (value->type) + { + case json_array: + + if (value->u.array.length == 0) + break; + + if (! (value->u.array.values = (json_value **) json_alloc + (state, value->u.array.length * sizeof (json_value *), 0)) ) + { + return 0; + } + + value->u.array.length = 0; + break; + + case json_object: + + if (value->u.object.length == 0) + break; + + values_size = sizeof (*value->u.object.values) * value->u.object.length; + + if (! (value->u.object.values = (json_object_entry *) json_alloc + (state, values_size + ((unsigned long) value->u.object.values), 0)) ) + { + return 0; + } + + value->_reserved.object_mem = (*(char **) &value->u.object.values) + values_size; + + value->u.object.length = 0; + break; + + case json_string: + + if (! (value->u.string.ptr = (json_char *) json_alloc + (state, (value->u.string.length + 1) * sizeof (json_char), 0)) ) + { + return 0; + } + + value->u.string.length = 0; + break; + + default: + break; + }; + + return 1; + } + + if (! (value = (json_value *) json_alloc + (state, sizeof (json_value) + state->settings.value_extra, 1))) + { + return 0; + } + + if (!*root) + *root = value; + + value->type = type; + value->parent = *top; + + #ifdef JSON_TRACK_SOURCE + value->line = state->cur_line; + value->col = state->cur_col; + #endif + + if (*alloc) + (*alloc)->_reserved.next_alloc = value; + + *alloc = *top = value; + + return 1; +} + +#define whitespace \ + case '\n': ++ state.cur_line; state.cur_col = 0; \ + case ' ': case '\t': case '\r' + +#define string_add(b) \ + do { if (!state.first_pass) string [string_length] = b; ++ string_length; } while (0); + +#define line_and_col \ + state.cur_line, state.cur_col + +static const long + flag_next = 1 << 0, + flag_reproc = 1 << 1, + flag_need_comma = 1 << 2, + flag_seek_value = 1 << 3, + flag_escaped = 1 << 4, + flag_string = 1 << 5, + flag_need_colon = 1 << 6, + flag_done = 1 << 7, + flag_num_negative = 1 << 8, + flag_num_zero = 1 << 9, + flag_num_e = 1 << 10, + flag_num_e_got_sign = 1 << 11, + flag_num_e_negative = 1 << 12, + flag_line_comment = 1 << 13, + flag_block_comment = 1 << 14; + +json_value * json_parse_ex (json_settings * settings, + const json_char * json, + size_t length, + char * error_buf) +{ + json_char error [json_error_max]; + const json_char * end; + json_value * top, * root, * alloc = 0; + json_state state = { 0 }; + long flags; + long num_digits = 0, num_e = 0; + json_int_t num_fraction = 0; + + /* Skip UTF-8 BOM + */ + if (length >= 3 && ((unsigned char) json [0]) == 0xEF + && ((unsigned char) json [1]) == 0xBB + && ((unsigned char) json [2]) == 0xBF) + { + json += 3; + length -= 3; + } + + error[0] = '\0'; + end = (json + length); + + memcpy (&state.settings, settings, sizeof (json_settings)); + + if (!state.settings.mem_alloc) + state.settings.mem_alloc = default_alloc; + + if (!state.settings.mem_free) + state.settings.mem_free = default_free; + + memset (&state.uint_max, 0xFF, sizeof (state.uint_max)); + memset (&state.ulong_max, 0xFF, sizeof (state.ulong_max)); + + state.uint_max -= 8; /* limit of how much can be added before next check */ + state.ulong_max -= 8; + + for (state.first_pass = 1; state.first_pass >= 0; -- state.first_pass) + { + json_uchar uchar; + unsigned char uc_b1, uc_b2, uc_b3, uc_b4; + json_char * string = 0; + unsigned int string_length = 0; + + top = root = 0; + flags = flag_seek_value; + + state.cur_line = 1; + + for (state.ptr = json ;; ++ state.ptr) + { + json_char b = (state.ptr == end ? 0 : *state.ptr); + + if (flags & flag_string) + { + if (!b) + { sprintf (error, "Unexpected EOF in string (at %d:%d)", line_and_col); + goto e_failed; + } + + if (string_length > state.uint_max) + goto e_overflow; + + if (flags & flag_escaped) + { + flags &= ~ flag_escaped; + + switch (b) + { + case 'b': string_add ('\b'); break; + case 'f': string_add ('\f'); break; + case 'n': string_add ('\n'); break; + case 'r': string_add ('\r'); break; + case 't': string_add ('\t'); break; + case 'u': + + if (end - state.ptr < 4 || + (uc_b1 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b2 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b3 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b4 = hex_value (*++ state.ptr)) == 0xFF) + { + sprintf (error, "Invalid character value `%c` (at %d:%d)", b, line_and_col); + goto e_failed; + } + + uc_b1 = (uc_b1 << 4) | uc_b2; + uc_b2 = (uc_b3 << 4) | uc_b4; + uchar = (uc_b1 << 8) | uc_b2; + + if ((uchar & 0xF800) == 0xD800) { + json_uchar uchar2; + + if (end - state.ptr < 6 || (*++ state.ptr) != '\\' || (*++ state.ptr) != 'u' || + (uc_b1 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b2 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b3 = hex_value (*++ state.ptr)) == 0xFF || + (uc_b4 = hex_value (*++ state.ptr)) == 0xFF) + { + sprintf (error, "Invalid character value `%c` (at %d:%d)", b, line_and_col); + goto e_failed; + } + + uc_b1 = (uc_b1 << 4) | uc_b2; + uc_b2 = (uc_b3 << 4) | uc_b4; + uchar2 = (uc_b1 << 8) | uc_b2; + + uchar = 0x010000 | ((uchar & 0x3FF) << 10) | (uchar2 & 0x3FF); + } + + if (sizeof (json_char) >= sizeof (json_uchar) || (uchar <= 0x7F)) + { + string_add ((json_char) uchar); + break; + } + + if (uchar <= 0x7FF) + { + if (state.first_pass) + string_length += 2; + else + { string [string_length ++] = 0xC0 | (uchar >> 6); + string [string_length ++] = 0x80 | (uchar & 0x3F); + } + + break; + } + + if (uchar <= 0xFFFF) { + if (state.first_pass) + string_length += 3; + else + { string [string_length ++] = 0xE0 | (uchar >> 12); + string [string_length ++] = 0x80 | ((uchar >> 6) & 0x3F); + string [string_length ++] = 0x80 | (uchar & 0x3F); + } + + break; + } + + if (state.first_pass) + string_length += 4; + else + { string [string_length ++] = 0xF0 | (uchar >> 18); + string [string_length ++] = 0x80 | ((uchar >> 12) & 0x3F); + string [string_length ++] = 0x80 | ((uchar >> 6) & 0x3F); + string [string_length ++] = 0x80 | (uchar & 0x3F); + } + + break; + + default: + string_add (b); + }; + + continue; + } + + if (b == '\\') + { + flags |= flag_escaped; + continue; + } + + if (b == '"') + { + if (!state.first_pass) + string [string_length] = 0; + + flags &= ~ flag_string; + string = 0; + + switch (top->type) + { + case json_string: + + top->u.string.length = string_length; + flags |= flag_next; + + break; + + case json_object: + + if (state.first_pass) + (*(json_char **) &top->u.object.values) += string_length + 1; + else + { + top->u.object.values [top->u.object.length].name + = (json_char *) top->_reserved.object_mem; + + top->u.object.values [top->u.object.length].name_length + = string_length; + + (*(json_char **) &top->_reserved.object_mem) += string_length + 1; + } + + flags |= flag_seek_value | flag_need_colon; + continue; + + default: + break; + }; + } + else + { + string_add (b); + continue; + } + } + + if (state.settings.settings & json_enable_comments) + { + if (flags & (flag_line_comment | flag_block_comment)) + { + if (flags & flag_line_comment) + { + if (b == '\r' || b == '\n' || !b) + { + flags &= ~ flag_line_comment; + -- state.ptr; /* so null can be reproc'd */ + } + + continue; + } + + if (flags & flag_block_comment) + { + if (!b) + { sprintf (error, "%d:%d: Unexpected EOF in block comment", line_and_col); + goto e_failed; + } + + if (b == '*' && state.ptr < (end - 1) && state.ptr [1] == '/') + { + flags &= ~ flag_block_comment; + ++ state.ptr; /* skip closing sequence */ + } + + continue; + } + } + else if (b == '/') + { + if (! (flags & (flag_seek_value | flag_done)) && top->type != json_object) + { sprintf (error, "%d:%d: Comment not allowed here", line_and_col); + goto e_failed; + } + + if (++ state.ptr == end) + { sprintf (error, "%d:%d: EOF unexpected", line_and_col); + goto e_failed; + } + + switch (b = *state.ptr) + { + case '/': + flags |= flag_line_comment; + continue; + + case '*': + flags |= flag_block_comment; + continue; + + default: + sprintf (error, "%d:%d: Unexpected `%c` in comment opening sequence", line_and_col, b); + goto e_failed; + }; + } + } + + if (flags & flag_done) + { + if (!b) + break; + + switch (b) + { + whitespace: + continue; + + default: + + sprintf (error, "%d:%d: Trailing garbage: `%c`", + state.cur_line, state.cur_col, b); + + goto e_failed; + }; + } + + if (flags & flag_seek_value) + { + switch (b) + { + whitespace: + continue; + + case ']': + + if (top && top->type == json_array) + flags = (flags & ~ (flag_need_comma | flag_seek_value)) | flag_next; + else + { sprintf (error, "%d:%d: Unexpected ]", line_and_col); + goto e_failed; + } + + break; + + default: + + if (flags & flag_need_comma) + { + if (b == ',') + { flags &= ~ flag_need_comma; + continue; + } + else + { + sprintf (error, "%d:%d: Expected , before %c", + state.cur_line, state.cur_col, b); + + goto e_failed; + } + } + + if (flags & flag_need_colon) + { + if (b == ':') + { flags &= ~ flag_need_colon; + continue; + } + else + { + sprintf (error, "%d:%d: Expected : before %c", + state.cur_line, state.cur_col, b); + + goto e_failed; + } + } + + flags &= ~ flag_seek_value; + + switch (b) + { + case '{': + + if (!new_value (&state, &top, &root, &alloc, json_object)) + goto e_alloc_failure; + + continue; + + case '[': + + if (!new_value (&state, &top, &root, &alloc, json_array)) + goto e_alloc_failure; + + flags |= flag_seek_value; + continue; + + case '"': + + if (!new_value (&state, &top, &root, &alloc, json_string)) + goto e_alloc_failure; + + flags |= flag_string; + + string = top->u.string.ptr; + string_length = 0; + + continue; + + case 't': + + if ((end - state.ptr) < 3 || *(++ state.ptr) != 'r' || + *(++ state.ptr) != 'u' || *(++ state.ptr) != 'e') + { + goto e_unknown_value; + } + + if (!new_value (&state, &top, &root, &alloc, json_boolean)) + goto e_alloc_failure; + + top->u.boolean = 1; + + flags |= flag_next; + break; + + case 'f': + + if ((end - state.ptr) < 4 || *(++ state.ptr) != 'a' || + *(++ state.ptr) != 'l' || *(++ state.ptr) != 's' || + *(++ state.ptr) != 'e') + { + goto e_unknown_value; + } + + if (!new_value (&state, &top, &root, &alloc, json_boolean)) + goto e_alloc_failure; + + flags |= flag_next; + break; + + case 'n': + + if ((end - state.ptr) < 3 || *(++ state.ptr) != 'u' || + *(++ state.ptr) != 'l' || *(++ state.ptr) != 'l') + { + goto e_unknown_value; + } + + if (!new_value (&state, &top, &root, &alloc, json_null)) + goto e_alloc_failure; + + flags |= flag_next; + break; + + default: + + if (isdigit (b) || b == '-') + { + if (!new_value (&state, &top, &root, &alloc, json_integer)) + goto e_alloc_failure; + + if (!state.first_pass) + { + while (isdigit (b) || b == '+' || b == '-' + || b == 'e' || b == 'E' || b == '.') + { + if ( (++ state.ptr) == end) + { + b = 0; + break; + } + + b = *state.ptr; + } + + flags |= flag_next | flag_reproc; + break; + } + + flags &= ~ (flag_num_negative | flag_num_e | + flag_num_e_got_sign | flag_num_e_negative | + flag_num_zero); + + num_digits = 0; + num_fraction = 0; + num_e = 0; + + if (b != '-') + { + flags |= flag_reproc; + break; + } + + flags |= flag_num_negative; + continue; + } + else + { sprintf (error, "%d:%d: Unexpected %c when seeking value", line_and_col, b); + goto e_failed; + } + }; + }; + } + else + { + switch (top->type) + { + case json_object: + + switch (b) + { + whitespace: + continue; + + case '"': + + if (flags & flag_need_comma) + { sprintf (error, "%d:%d: Expected , before \"", line_and_col); + goto e_failed; + } + + flags |= flag_string; + + string = (json_char *) top->_reserved.object_mem; + string_length = 0; + + break; + + case '}': + + flags = (flags & ~ flag_need_comma) | flag_next; + break; + + case ',': + + if (flags & flag_need_comma) + { + flags &= ~ flag_need_comma; + break; + } + + default: + sprintf (error, "%d:%d: Unexpected `%c` in object", line_and_col, b); + goto e_failed; + }; + + break; + + case json_integer: + case json_double: + + if (isdigit (b)) + { + ++ num_digits; + + if (top->type == json_integer || flags & flag_num_e) + { + if (! (flags & flag_num_e)) + { + if (flags & flag_num_zero) + { sprintf (error, "%d:%d: Unexpected `0` before `%c`", line_and_col, b); + goto e_failed; + } + + if (num_digits == 1 && b == '0') + flags |= flag_num_zero; + } + else + { + flags |= flag_num_e_got_sign; + num_e = (num_e * 10) + (b - '0'); + continue; + } + + top->u.integer = (top->u.integer * 10) + (b - '0'); + continue; + } + + num_fraction = (num_fraction * 10) + (b - '0'); + continue; + } + + if (b == '+' || b == '-') + { + if ( (flags & flag_num_e) && !(flags & flag_num_e_got_sign)) + { + flags |= flag_num_e_got_sign; + + if (b == '-') + flags |= flag_num_e_negative; + + continue; + } + } + else if (b == '.' && top->type == json_integer) + { + if (!num_digits) + { sprintf (error, "%d:%d: Expected digit before `.`", line_and_col); + goto e_failed; + } + + top->type = json_double; + top->u.dbl = (double) top->u.integer; + + num_digits = 0; + continue; + } + + if (! (flags & flag_num_e)) + { + if (top->type == json_double) + { + if (!num_digits) + { sprintf (error, "%d:%d: Expected digit after `.`", line_and_col); + goto e_failed; + } + + top->u.dbl += ((double) num_fraction) / (pow (10.0, (double) num_digits)); + } + + if (b == 'e' || b == 'E') + { + flags |= flag_num_e; + + if (top->type == json_integer) + { + top->type = json_double; + top->u.dbl = (double) top->u.integer; + } + + num_digits = 0; + flags &= ~ flag_num_zero; + + continue; + } + } + else + { + if (!num_digits) + { sprintf (error, "%d:%d: Expected digit after `e`", line_and_col); + goto e_failed; + } + + top->u.dbl *= pow (10.0, (double) + (flags & flag_num_e_negative ? - num_e : num_e)); + } + + if (flags & flag_num_negative) + { + if (top->type == json_integer) + top->u.integer = - top->u.integer; + else + top->u.dbl = - top->u.dbl; + } + + flags |= flag_next | flag_reproc; + break; + + default: + break; + }; + } + + if (flags & flag_reproc) + { + flags &= ~ flag_reproc; + -- state.ptr; + } + + if (flags & flag_next) + { + flags = (flags & ~ flag_next) | flag_need_comma; + + if (!top->parent) + { + /* root value done */ + + flags |= flag_done; + continue; + } + + if (top->parent->type == json_array) + flags |= flag_seek_value; + + if (!state.first_pass) + { + json_value * parent = top->parent; + + switch (parent->type) + { + case json_object: + + parent->u.object.values + [parent->u.object.length].value = top; + + break; + + case json_array: + + parent->u.array.values + [parent->u.array.length] = top; + + break; + + default: + break; + }; + } + + if ( (++ top->parent->u.array.length) > state.uint_max) + goto e_overflow; + + top = top->parent; + + continue; + } + } + + alloc = root; + } + + return root; + +e_unknown_value: + + sprintf (error, "%d:%d: Unknown value", line_and_col); + goto e_failed; + +e_alloc_failure: + + strcpy (error, "Memory allocation failure"); + goto e_failed; + +e_overflow: + + sprintf (error, "%d:%d: Too long (caught overflow)", line_and_col); + goto e_failed; + +e_failed: + + if (error_buf) + { + if (*error) + strcpy (error_buf, error); + else + strcpy (error_buf, "Unknown error"); + } + + if (state.first_pass) + alloc = root; + + while (alloc) + { + top = alloc->_reserved.next_alloc; + state.settings.mem_free (alloc, state.settings.user_data); + alloc = top; + } + + if (!state.first_pass) + json_value_free_ex (&state.settings, root); + + return 0; +} + +json_value * json_parse (const json_char * json, size_t length) +{ + json_settings settings = { 0 }; + return json_parse_ex (&settings, json, length, 0); +} + +void json_value_free_ex (json_settings * settings, json_value * value) +{ + json_value * cur_value; + + if (!value) + return; + + value->parent = 0; + + while (value) + { + switch (value->type) + { + case json_array: + + if (!value->u.array.length) + { + settings->mem_free (value->u.array.values, settings->user_data); + break; + } + + value = value->u.array.values [-- value->u.array.length]; + continue; + + case json_object: + + if (!value->u.object.length) + { + settings->mem_free (value->u.object.values, settings->user_data); + break; + } + + value = value->u.object.values [-- value->u.object.length].value; + continue; + + case json_string: + + settings->mem_free (value->u.string.ptr, settings->user_data); + break; + + default: + break; + }; + + cur_value = value; + value = value->parent; + settings->mem_free (cur_value, settings->user_data); + } +} + +void json_value_free (json_value * value) +{ + json_settings settings = { 0 }; + settings.mem_free = default_free; + json_value_free_ex (&settings, value); +} + diff --git a/source/json/json.h b/source/json/json.h new file mode 100644 index 0000000..f6549ec --- /dev/null +++ b/source/json/json.h @@ -0,0 +1,283 @@ + +/* vim: set et ts=3 sw=3 sts=3 ft=c: + * + * Copyright (C) 2012, 2013, 2014 James McLaughlin et al. All rights reserved. + * https://github.com/udp/json-parser + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef _JSON_H +#define _JSON_H + +#ifndef json_char + #define json_char char +#endif + +#ifndef json_int_t + #ifndef _MSC_VER + #include + #define json_int_t int64_t + #else + #define json_int_t __int64 + #endif +#endif + +#include + +#ifdef __cplusplus + + #include + + extern "C" + { + +#endif + +typedef struct +{ + unsigned long max_memory; + int settings; + + /* Custom allocator support (leave null to use malloc/free) + */ + + void * (* mem_alloc) (size_t, int zero, void * user_data); + void (* mem_free) (void *, void * user_data); + + void * user_data; /* will be passed to mem_alloc and mem_free */ + + size_t value_extra; /* how much extra space to allocate for values? */ + +} json_settings; + +#define json_enable_comments 0x01 + +typedef enum +{ + json_none, + json_object, + json_array, + json_integer, + json_double, + json_string, + json_boolean, + json_null + +} json_type; + +extern const struct _json_value json_value_none; + +typedef struct _json_object_entry +{ + json_char * name; + unsigned int name_length; + + struct _json_value * value; + +} json_object_entry; + +typedef struct _json_value +{ + struct _json_value * parent; + + json_type type; + + union + { + int boolean; + json_int_t integer; + double dbl; + + struct + { + unsigned int length; + json_char * ptr; /* null terminated */ + + } string; + + struct + { + unsigned int length; + + json_object_entry * values; + + #if defined(__cplusplus) && __cplusplus >= 201103L + decltype(values) begin () const + { return values; + } + decltype(values) end () const + { return values + length; + } + #endif + + } object; + + struct + { + unsigned int length; + struct _json_value ** values; + + #if defined(__cplusplus) && __cplusplus >= 201103L + decltype(values) begin () const + { return values; + } + decltype(values) end () const + { return values + length; + } + #endif + + } array; + + } u; + + union + { + struct _json_value * next_alloc; + void * object_mem; + + } _reserved; + + #ifdef JSON_TRACK_SOURCE + + /* Location of the value in the source JSON + */ + unsigned int line, col; + + #endif + + + /* Some C++ operator sugar */ + + #ifdef __cplusplus + + public: + + inline _json_value () + { memset (this, 0, sizeof (_json_value)); + } + + inline const struct _json_value &operator [] (int index) const + { + if (type != json_array || index < 0 + || ((unsigned int) index) >= u.array.length) + { + return json_value_none; + } + + return *u.array.values [index]; + } + + inline const struct _json_value &operator [] (const char * index) const + { + if (type != json_object) + return json_value_none; + + for (unsigned int i = 0; i < u.object.length; ++ i) + if (!strcmp (u.object.values [i].name, index)) + return *u.object.values [i].value; + + return json_value_none; + } + + inline operator const char * () const + { + switch (type) + { + case json_string: + return u.string.ptr; + + default: + return ""; + }; + } + + inline operator json_int_t () const + { + switch (type) + { + case json_integer: + return u.integer; + + case json_double: + return (json_int_t) u.dbl; + + default: + return 0; + }; + } + + inline operator bool () const + { + if (type != json_boolean) + return false; + + return u.boolean != 0; + } + + inline operator double () const + { + switch (type) + { + case json_integer: + return (double) u.integer; + + case json_double: + return u.dbl; + + default: + return 0; + }; + } + + #endif + +} json_value; + +json_value * json_parse (const json_char * json, + size_t length); + +#define json_error_max 128 +json_value * json_parse_ex (json_settings * settings, + const json_char * json, + size_t length, + char * error); + +void json_value_free (json_value *); + + +/* Not usually necessary, unless you used a custom mem_alloc and now want to + * use a custom mem_free. + */ +void json_value_free_ex (json_settings * settings, + json_value *); + + +#ifdef __cplusplus + } /* extern "C" */ +#endif + +#endif + + diff --git a/source/main.c b/source/main.c new file mode 100644 index 0000000..26dab60 --- /dev/null +++ b/source/main.c @@ -0,0 +1,45 @@ +#include "main.h" +#include "draw.h" +#include +#include "clock.h" + + + +int main(void) +{ + //u32 kernelVersion; + gfxInitDefault(); + romfsInit(); + drawInit(); + initUI(); + bool loop = true; + s64 timenow = (s64)getTimeInMsec(Timer_Restart()); + s64 timefinish = timenow + 500; + s64 dif; + while (aptMainLoop() && loop) + { + timenow = (s64)getTimeInMsec(Timer_Restart()); + if (timefinish - timenow > 0) + dif = timefinish - timenow; + else + dif = 0; + + handleFadeIn(dif, 500); + + + hidScanInput(); + u32 kDown = hidKeysDown(); + if (kDown & KEY_START) { + loop = false; + setExitMode(); + }; // break in order to return to hbmenu + updateUI(); + } + svcSleepThread(1000000000); + drawEndFrame(); + drawExit(); + exitUI(); + romfsExit(); + gfxExit(); + return (0); +} diff --git a/source/main.h b/source/main.h new file mode 100644 index 0000000..865d2a8 --- /dev/null +++ b/source/main.h @@ -0,0 +1,13 @@ +#ifndef MAIN_H +#define MAIN_H + +#include +#include +#include +#include +#include +#include +#include <3ds.h> +#include "graphics.h" +#include "drawableObject.h" +#endif \ No newline at end of file diff --git a/source/png.c b/source/png.c new file mode 100644 index 0000000..422d283 --- /dev/null +++ b/source/png.c @@ -0,0 +1,165 @@ +#include "draw.h" +#include +#include +#include +#include + +#define PNG_SIGSIZE (8) + +Result textureTile32(C3D_Tex *texture) +{ + u8 *tmp; + int i; + int height; + int width; + u32 pixel; + u32 size; + + height = (int)texture->height; + width = (int)texture->width; + tmp = linearAlloc(width * height * 4); + if (!tmp) goto error; + size = width * height * 4; + for (i = 0; i < size; i += 4) + { + pixel = *(u32 *)(texture->data + i); + *(u32 *)(tmp + i) = __builtin_bswap32(pixel); + } + GSPGPU_FlushDataCache(tmp, width * height * 4); + GSPGPU_FlushDataCache(texture->data, width * height * 4); + C3D_SafeDisplayTransfer((u32 *)tmp, GX_BUFFER_DIM(width, height), \ + (u32*)texture->data, GX_BUFFER_DIM(width, height), TEXTURE_TRANSFER_FLAGS); + gspWaitForPPF(); + linearFree(tmp); + return (MAKERESULT(RL_SUCCESS, RS_SUCCESS, RM_COMMON, RD_SUCCESS)); +error: + return (MAKERESULT(RL_TEMPORARY, RS_OUTOFRESOURCE, RM_COMMON, RD_OUT_OF_MEMORY)); +} + +static void readPNGFile(png_structp pngPtr, png_bytep data, png_size_t length) +{ + FILE *file = (FILE *)png_get_io_ptr(pngPtr); + fread(data, length, 1, file); +} + +static Result loadPNGGeneric(sprite_t **out, const void *ioPtr) +{ + png_structp pngPtr; + png_infop infoPtr; + png_bytep *rowPtrs; + sprite_t *sprite; + Result result; + unsigned int width; + unsigned int height; + int bitDepth; + int colorType; + int stride; + int i; + + rowPtrs = NULL; + pngPtr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); + if (pngPtr == NULL) + { + result = MAKERESULT(RL_PERMANENT, RS_INTERNAL, RM_APPLICATION, RD_INVALID_RESULT_VALUE); + goto errorCreateRead; + } + infoPtr = png_create_info_struct(pngPtr); + if (infoPtr == NULL) + { + result = MAKERESULT(RL_PERMANENT, RS_INTERNAL, RM_APPLICATION, RD_INVALID_RESULT_VALUE); + goto errorCreateInfo; + } + if (setjmp(png_jmpbuf(pngPtr))) + { + png_destroy_read_struct(&pngPtr, &infoPtr, (png_infopp)0); + if (rowPtrs != NULL) + free(rowPtrs); + result = MAKERESULT(RL_PERMANENT, RS_INTERNAL, RM_APPLICATION, RD_INVALID_RESULT_VALUE); + return (result); + } + png_set_read_fn(pngPtr, (png_voidp)ioPtr, readPNGFile); + png_set_sig_bytes(pngPtr, PNG_SIGSIZE); + png_read_info(pngPtr, infoPtr); + png_get_IHDR(pngPtr, infoPtr, &width, &height, &bitDepth, &colorType, NULL, NULL, NULL); + if ((colorType == PNG_COLOR_TYPE_PALETTE && bitDepth <= 8) + || (colorType == PNG_COLOR_TYPE_GRAY && bitDepth < 8) + || png_get_valid(pngPtr, infoPtr, PNG_INFO_tRNS) + || (bitDepth == 16)) + { + png_set_expand(pngPtr); + } + + if (bitDepth == 16) png_set_scale_16(pngPtr); + if (bitDepth == 8 && colorType == PNG_COLOR_TYPE_RGB) png_set_filler(pngPtr, 0xFF, PNG_FILLER_AFTER); + if (colorType == PNG_COLOR_TYPE_GRAY || colorType == PNG_COLOR_TYPE_GRAY_ALPHA) + png_set_gray_to_rgb(pngPtr); + if (colorType == PNG_COLOR_TYPE_PALETTE) + { + png_set_palette_to_rgb(pngPtr); + png_set_filler(pngPtr, 0xFF, PNG_FILLER_AFTER); + } + if (colorType == PNG_COLOR_TYPE_GRAY && bitDepth < 8) png_set_expand_gray_1_2_4_to_8(pngPtr); + if (png_get_valid(pngPtr, infoPtr, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(pngPtr); + if (bitDepth < 8) png_set_packing(pngPtr); + png_read_update_info(pngPtr, infoPtr); + rowPtrs = (png_bytep *)malloc(sizeof(png_bytep) * height); + if (!rowPtrs) + { + result = MAKERESULT(RL_PERMANENT, RS_OUTOFRESOURCE, RM_APPLICATION, RD_OUT_OF_MEMORY); + goto errorAllocRows; + } + sprite = newSprite(width, height); + if (!sprite) + { + result = MAKERESULT(RL_PERMANENT, RS_OUTOFRESOURCE, RM_APPLICATION, RD_OUT_OF_MEMORY); + goto errorCreateSprite; + } + else + *out = sprite; + stride = sprite->texture.width * 4; + + for (i = 0; i < height; i++) + { + rowPtrs[i] = (png_bytep)(sprite->texture.data + i * stride); + } + png_read_image(pngPtr, rowPtrs); + textureTile32(&sprite->texture); + result = MAKERESULT(RL_SUCCESS, RS_SUCCESS, RM_APPLICATION, RD_SUCCESS); +errorCreateSprite: + free(rowPtrs); +errorAllocRows: + png_destroy_info_struct(pngPtr, &infoPtr); +errorCreateInfo: + png_destroy_read_struct(&pngPtr, (png_infopp)0, (png_infopp)0); +errorCreateRead: + return (result); +} + + +Result newSpriteFromPNG(sprite_t **out, const char *filename) +{ + FILE *file; + Result result; + png_byte pngsig[PNG_SIGSIZE]; + + if (!(file = fopen(filename, "rb"))) + { + result = MAKERESULT(RL_PERMANENT, RS_NOTFOUND, RM_APPLICATION, RD_NOT_FOUND); + goto exitError; + } + if (fread(pngsig, 1, PNG_SIGSIZE, file) != PNG_SIGSIZE) + { + result = MAKERESULT(RL_PERMANENT, RS_INVALIDARG, RM_APPLICATION, RD_INVALID_SIZE); + goto exitClose; + } + if (png_sig_cmp(pngsig, 0, PNG_SIGSIZE) != 0) + { + result = MAKERESULT(RL_PERMANENT, RS_INVALIDARG, RM_APPLICATION, RD_INVALID_SELECTION); + goto exitClose; + } + result = loadPNGGeneric(out, (void *)file); +exitClose: + fclose(file); +exitError: + return (result); +} diff --git a/source/vshader.v.pica b/source/vshader.v.pica new file mode 100644 index 0000000..12c673e --- /dev/null +++ b/source/vshader.v.pica @@ -0,0 +1,38 @@ +; Uniforms +.fvec projection[4] + +; Constants +.constf myconst(0.0, 1.0, -1.0, 0.1) +.constf RGBA_TO_FLOAT4(0.00392156862, 0, 0, 0) +.alias ones myconst.yyyy ; Vector full of ones +.alias zeros myconst.xxxx ; Vector full of zeros + +; Outputs +.out outpos position +.out outclr color +.out outtc0 texcoord0 + +; Inputs (defined as aliases for convenience) +.alias inpos v0 +.alias intex v1 + +.proc main + ; Force the zw component of inpos to be 1.0 + mov r0.xy, inpos + mov r0.z, zeros + mov r0.w, ones + + ; outpos = projectionMatrix * inpos + dp4 outpos.x, projection[0], r0 + dp4 outpos.y, projection[1], r0 + mov outpos.z, zeros + mov outpos.w, ones + + ;outtc0 = intexcoord + mov outtc0, intex + + ;outclr + mul outclr, RGBA_TO_FLOAT4.xxxx, intex + + end +.end \ No newline at end of file