Latest compatible version of Classicube from the original GitHub repository (https://github.com/ClassiCube/ClassiCube) that can be compiled on Classicube for PowerMac PPC running Mac OS X 10.4.
This commit is contained in:
127
misc/3ds/Makefile
Normal file
127
misc/3ds/Makefile
Normal file
@@ -0,0 +1,127 @@
|
||||
ifeq ($(strip $(DEVKITPRO)),)
|
||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
||||
endif
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Configurable options
|
||||
#---------------------------------------------------------------------------------
|
||||
# Name of the final output
|
||||
TARGET = ClassiCube-3ds
|
||||
# List of directories containing source code
|
||||
SOURCE_DIRS = src src/3ds third_party/bearssl/src
|
||||
# List of directories containing shader files
|
||||
SHDR_DIRS = misc/3ds
|
||||
# List of directories containing more header files
|
||||
INCLUDES = -Ithird_party/bearssl/inc
|
||||
# Directory where object files are placed
|
||||
BUILD_DIR = build/3ds
|
||||
|
||||
APP_ICON = misc/3ds/icon.png
|
||||
APP_TITLE = ClassiCube
|
||||
APP_DESCRIPTION = Simple block building sandbox
|
||||
APP_AUTHOR = ClassiCube team
|
||||
|
||||
CIA_BANNER_BIN = misc/3ds/banner.bin
|
||||
CIA_ICON_BIN = misc/3ds/icon.bin
|
||||
CIA_SPEC_RSF = misc/3ds/spec.rsf
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Code generation
|
||||
#---------------------------------------------------------------------------------
|
||||
S_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.S))
|
||||
C_FILES = $(foreach dir,$(SOURCE_DIRS),$(wildcard $(dir)/*.c))
|
||||
OBJS = $(addprefix $(BUILD_DIR)/, $(notdir $(C_FILES:%.c=%.o) $(S_FILES:%.S=%.o)))
|
||||
|
||||
PICAFILES := $(foreach dir,$(SHDR_DIRS),$(notdir $(wildcard $(dir)/*.v.pica)))
|
||||
OBJS += $(addprefix $(BUILD_DIR)/, $(PICAFILES:.v.pica=.shbin.o))
|
||||
|
||||
ARCH = -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft
|
||||
CFLAGS = -g -Wall -O2 -mword-relocations -ffunction-sections $(ARCH) $(INCLUDE) -D__3DS__
|
||||
ASFLAGS = -g $(ARCH)
|
||||
|
||||
LDFLAGS = -specs=3dsx.specs -g $(ARCH)
|
||||
LIBS = -lctru -lm
|
||||
|
||||
CTRULIB = $(DEVKITPRO)/libctru
|
||||
INCLUDES += $(foreach dir, $(CTRULIB), -I$(dir)/include)
|
||||
LDFLAGS += $(foreach dir, $(CTRULIB), -L$(dir)/lib)
|
||||
|
||||
# Dependency tracking
|
||||
DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d
|
||||
DEPFILES := $(OBJS:%.o=%.d)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Compiler tools
|
||||
#---------------------------------------------------------------------------------
|
||||
PREFIX := $(DEVKITPRO)/devkitARM/bin/arm-none-eabi-
|
||||
ARM_AS := $(PREFIX)as
|
||||
ARM_CC := $(PREFIX)gcc
|
||||
ARM_CXX := $(PREFIX)g++
|
||||
|
||||
_DSXTOOL := $(DEVKITPRO)/tools/bin/3dsxtool
|
||||
SMDHTOOL := $(DEVKITPRO)/tools/bin/smdhtool
|
||||
PICASSO := $(DEVKITPRO)/tools/bin/picasso
|
||||
BIN2S := $(DEVKITPRO)/tools/bin/bin2s
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Main targets
|
||||
#---------------------------------------------------------------------------------
|
||||
default: $(BUILD_DIR) $(TARGET).cia
|
||||
|
||||
clean:
|
||||
rm $(TARGET).cia $(TARGET).3dsx $(TARGET).elf $(OBJS)
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Executable generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(TARGET).elf: $(OBJS)
|
||||
$(ARM_CC) $(LDFLAGS) $^ -o $@ $(LIBS)
|
||||
|
||||
$(BUILD_DIR).smdh: $(APP_ICON)
|
||||
$(SMDHTOOL) --create "$(APP_TITLE)" "$(APP_DESCRIPTION)" "$(APP_AUTHOR)" $(APP_ICON) $@
|
||||
|
||||
$(TARGET).3dsx: $(TARGET).elf $(BUILD_DIR).smdh
|
||||
$(_DSXTOOL) $< $@ --smdh=$(BUILD_DIR).smdh
|
||||
|
||||
$(BUILD_DIR)/makerom:
|
||||
wget https://github.com/3DSGuy/Project_CTR/releases/download/makerom-v0.18.3/makerom-v0.18.3-ubuntu_x86_64.zip -O $(BUILD_DIR)/makerom.zip
|
||||
unzip $(BUILD_DIR)/makerom.zip -d $(BUILD_DIR)
|
||||
chmod +x $(BUILD_DIR)/makerom
|
||||
|
||||
$(TARGET).cia : $(TARGET).3dsx $(BUILD_DIR)/makerom
|
||||
$(BUILD_DIR)/makerom -f cia -o $(TARGET).cia -elf $(TARGET).elf -rsf $(CIA_SPEC_RSF) -icon $(CIA_ICON_BIN) -banner $(CIA_BANNER_BIN) -exefslogo -target t
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Object generation
|
||||
#---------------------------------------------------------------------------------
|
||||
$(BUILD_DIR)/%.o: src/%.c
|
||||
$(ARM_CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: src/3ds/%.c
|
||||
$(ARM_CC) $(CFLAGS) $(INCLUDES) $(DEPFLAGS) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.o: third_party/bearssl/src/%.c
|
||||
$(ARM_CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.shbin: misc/3ds/%.v.pica
|
||||
$(PICASSO) $< -o $@
|
||||
|
||||
$(BUILD_DIR)/%.shbin.o: $(BUILD_DIR)/%.shbin
|
||||
$(BIN2S) $< | $(ARM_AS) -o $@
|
||||
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# Dependency tracking
|
||||
#---------------------------------------------------------------------------------
|
||||
$(DEPFILES):
|
||||
|
||||
include $(wildcard $(DEPFILES))
|
||||
BIN
misc/3ds/audio.wav
Normal file
BIN
misc/3ds/audio.wav
Normal file
Binary file not shown.
BIN
misc/3ds/banner.png
Normal file
BIN
misc/3ds/banner.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
33
misc/3ds/coloured.v.pica
Normal file
33
misc/3ds/coloured.v.pica
Normal file
@@ -0,0 +1,33 @@
|
||||
; Vertex shader for rendering coloured vertices for PICA200 GPU on the Nintendo 3DS
|
||||
; ==================================================================================
|
||||
|
||||
; Uniforms
|
||||
.fvec MVP[4];
|
||||
|
||||
; Constants
|
||||
.constf ONE_DIV_255(0.003921568627, 0.003921568627, 0.003921568627, 0.003921568627)
|
||||
|
||||
; Outputs
|
||||
.out out_pos position
|
||||
.out out_col color
|
||||
|
||||
; Inputs (defined as aliases for convenience)
|
||||
.alias in_pos v0
|
||||
.alias in_col v1
|
||||
|
||||
.proc main
|
||||
; r0 = in_pos
|
||||
mov r0, in_pos
|
||||
|
||||
; out_pos = MVP * r0
|
||||
dp4 out_pos.x, MVP[0], r0
|
||||
dp4 out_pos.y, MVP[1], r0
|
||||
dp4 out_pos.z, MVP[2], r0
|
||||
dp4 out_pos.w, MVP[3], r0
|
||||
|
||||
; out_col = in_col * ONE_DIV_255
|
||||
mul out_col, ONE_DIV_255, in_col
|
||||
|
||||
end
|
||||
.end
|
||||
|
||||
BIN
misc/3ds/icon.png
Normal file
BIN
misc/3ds/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
38
misc/3ds/offset.v.pica
Normal file
38
misc/3ds/offset.v.pica
Normal file
@@ -0,0 +1,38 @@
|
||||
; Vertex shader for rendering textured vertices with an offset for PICA200 GPU on the Nintendo 3DS
|
||||
; ==================================================================================
|
||||
|
||||
; Uniforms
|
||||
.fvec MVP[4];
|
||||
.fvec tex_offset;
|
||||
|
||||
; Constants
|
||||
.constf ONE_DIV_255(0.003921568627, 0.003921568627, 0.003921568627, 0.003921568627)
|
||||
|
||||
; Outputs
|
||||
.out out_pos position
|
||||
.out out_col color
|
||||
.out out_tex texcoord0
|
||||
|
||||
; Inputs (defined as aliases for convenience)
|
||||
.alias in_pos v0
|
||||
.alias in_col v1
|
||||
.alias in_tex v2
|
||||
|
||||
.proc main
|
||||
; r0 = in_pos
|
||||
mov r0, in_pos
|
||||
|
||||
; out_pos = MVP * r0
|
||||
dp4 out_pos.x, MVP[0], r0
|
||||
dp4 out_pos.y, MVP[1], r0
|
||||
dp4 out_pos.z, MVP[2], r0
|
||||
dp4 out_pos.w, MVP[3], r0
|
||||
|
||||
; out_col = in_col * ONE_DIV_255
|
||||
mul out_col, ONE_DIV_255, in_col
|
||||
; out_tex = in_tex + tex_offset
|
||||
add out_tex, tex_offset, in_tex
|
||||
|
||||
end
|
||||
.end
|
||||
|
||||
5
misc/3ds/readme.md
Normal file
5
misc/3ds/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
Commands used to generate the .bin files:
|
||||
|
||||
`bannertool makebanner -i banner.png -a audio.wav -o banner.bin`
|
||||
|
||||
`bannertool makesmdh -s ClassiCube -l ClassiCube -p UnknownShadow200 -i icon.png -o icon.bin`
|
||||
204
misc/3ds/spec.rsf
Normal file
204
misc/3ds/spec.rsf
Normal file
@@ -0,0 +1,204 @@
|
||||
# https://github.com/msikma/3ds-tpl
|
||||
# https://gist.github.com/jakcron/9f9f02ffd94d98a72632
|
||||
|
||||
BasicInfo:
|
||||
Title : ClassiCube
|
||||
CompanyCode : "00"
|
||||
ProductCode : CCBE
|
||||
ContentType : Application
|
||||
Logo : Nintendo
|
||||
|
||||
TitleInfo:
|
||||
UniqueId : 0x00CCBE
|
||||
Category : Application
|
||||
|
||||
CardInfo:
|
||||
MediaSize : 128MB # 128MB / 256MB / 512MB / 1GB / 2GB / 4GB
|
||||
MediaType : Card1 # Card1 / Card2
|
||||
CardDevice : NorFlash # NorFlash(Pick this if you use savedata) / None
|
||||
|
||||
|
||||
Option:
|
||||
UseOnSD : true # 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 : false # Enables encryption for NCCH and CIA
|
||||
EnableCompress : true # Compresses exefs code
|
||||
|
||||
AccessControlInfo:
|
||||
#UseExtSaveData : true
|
||||
#ExtSaveDataId: 0xff3ff
|
||||
#UseExtendedSaveDataAccessControl: true
|
||||
#AccessibleSaveDataIds: [0x101, 0x202, 0x303, 0x404, 0x505, 0x606]
|
||||
|
||||
SystemControlInfo:
|
||||
SaveDataSize: 128KB
|
||||
RemasterVersion: 0
|
||||
StackSize: 0x40000
|
||||
|
||||
AccessControlInfo:
|
||||
FileSystemAccess:
|
||||
- Debug
|
||||
- DirectSdmc
|
||||
- DirectSdmcWrite
|
||||
|
||||
IdealProcessor : 0
|
||||
AffinityMask : 1
|
||||
|
||||
Priority : 16
|
||||
SystemMode : 80MB
|
||||
MaxCpu : 0x9E # Default
|
||||
DisableDebug : false
|
||||
EnableForceDebug : false
|
||||
CanWriteSharedPage : false
|
||||
CanUsePrivilegedPriority : false
|
||||
CanUseNonAlphabetAndNumber : false
|
||||
PermitMainFunctionArgument : false
|
||||
CanShareDeviceMemory : false
|
||||
RunnableOnSleep : false
|
||||
SpecialMemoryArrange : false
|
||||
CoreVersion : 2
|
||||
DescVersion : 2
|
||||
|
||||
ReleaseKernelMajor : "02"
|
||||
ReleaseKernelMinor : "33"
|
||||
MemoryType : Application
|
||||
HandleTableSize: 512
|
||||
|
||||
# New3DS Exclusive Process Settings
|
||||
SystemModeExt : 124MB # Legacy(Default)/124MB/178MB Legacy:Use Old3DS SystemMode
|
||||
CpuSpeed : 804MHz # 268MHz(Default)/804MHz
|
||||
EnableL2Cache : true # false(default)/true
|
||||
CanAccessCore2 : true
|
||||
|
||||
# Virtual Address Mappings
|
||||
IORegisterMapping:
|
||||
- 1ff50000-1ff57fff # DSP memory
|
||||
- 1ff70000-1ff77fff
|
||||
MemoryMapping:
|
||||
- 1f000000-1f5fffff:r # VRAM
|
||||
|
||||
SystemCallAccess:
|
||||
ArbitrateAddress: 34
|
||||
Break: 60
|
||||
CancelTimer: 28
|
||||
ClearEvent: 25
|
||||
ClearTimer: 29
|
||||
CloseHandle: 35
|
||||
ConnectToPort: 45
|
||||
ControlMemory: 1
|
||||
CreateAddressArbiter: 33
|
||||
CreateEvent: 23
|
||||
CreateMemoryBlock: 30
|
||||
CreateMutex: 19
|
||||
CreateSemaphore: 21
|
||||
CreateThread: 8
|
||||
CreateTimer: 26
|
||||
DuplicateHandle: 39
|
||||
ExitProcess: 3
|
||||
ExitThread: 9
|
||||
GetCurrentProcessorNumber: 17
|
||||
GetHandleInfo: 41
|
||||
GetProcessId: 53
|
||||
GetProcessIdOfThread: 54
|
||||
GetProcessIdealProcessor: 6
|
||||
GetProcessInfo: 43
|
||||
GetResourceLimit: 56
|
||||
GetResourceLimitCurrentValues: 58
|
||||
GetResourceLimitLimitValues: 57
|
||||
GetSystemInfo: 42
|
||||
GetSystemTick: 40
|
||||
GetThreadContext: 59
|
||||
GetThreadId: 55
|
||||
GetThreadIdealProcessor: 15
|
||||
GetThreadInfo: 44
|
||||
GetThreadPriority: 11
|
||||
MapMemoryBlock: 31
|
||||
OutputDebugString: 61
|
||||
QueryMemory: 2
|
||||
ReleaseMutex: 20
|
||||
ReleaseSemaphore: 22
|
||||
SendSyncRequest1: 46
|
||||
SendSyncRequest2: 47
|
||||
SendSyncRequest3: 48
|
||||
SendSyncRequest4: 49
|
||||
SendSyncRequest: 50
|
||||
SetThreadPriority: 12
|
||||
SetTimer: 27
|
||||
SignalEvent: 24
|
||||
SleepThread: 10
|
||||
UnmapMemoryBlock: 32
|
||||
WaitSynchronization1: 36
|
||||
WaitSynchronizationN: 37
|
||||
InterruptNumbers:
|
||||
|
||||
# Service List
|
||||
# Maximum 34 services (32 if firmware is prior to 9.3.0)
|
||||
ServiceAccessControl:
|
||||
- APT:U
|
||||
- $hioFIO
|
||||
- $hostio0
|
||||
- $hostio1
|
||||
- ac:u
|
||||
- boss:U
|
||||
- cam:u
|
||||
- cecd:u
|
||||
- cfg:u
|
||||
- dlp:FKCL
|
||||
- dlp:SRVR
|
||||
- dsp::DSP
|
||||
- frd:u
|
||||
- fs:USER
|
||||
- gsp::Gpu
|
||||
- hid:USER
|
||||
- mic:u
|
||||
- ndm:u
|
||||
- news:s
|
||||
- nwm::UDS
|
||||
- ptm:u
|
||||
- pxi:dev
|
||||
- soc:U
|
||||
- gsp::Lcd
|
||||
- y2r:u
|
||||
- ldr:ro
|
||||
- ir:USER
|
||||
- ir:u
|
||||
- csnd:SND
|
||||
- am:u
|
||||
- ns:s
|
||||
|
||||
SystemControlInfo:
|
||||
# Modules that run services listed above should be included below
|
||||
# Maximum 48 dependencies
|
||||
# If a module is listed that isn't present on the 3DS, the title will get stuck at the logo (3ds waves)
|
||||
# So act, nfc and qtm are commented for 4.x support. Uncomment if you need these.
|
||||
# <module name>:<module titleid>
|
||||
Dependency:
|
||||
ac: 0x0004013000002402L
|
||||
am: 0x0004013000001502L
|
||||
boss: 0x0004013000003402L
|
||||
camera: 0x0004013000001602L
|
||||
cecd: 0x0004013000002602L
|
||||
cfg: 0x0004013000001702L
|
||||
codec: 0x0004013000001802L
|
||||
csnd: 0x0004013000002702L
|
||||
dlp: 0x0004013000002802L
|
||||
dsp: 0x0004013000001a02L
|
||||
friends: 0x0004013000003202L
|
||||
gpio: 0x0004013000001b02L
|
||||
gsp: 0x0004013000001c02L
|
||||
hid: 0x0004013000001d02L
|
||||
i2c: 0x0004013000001e02L
|
||||
ir: 0x0004013000003302L
|
||||
mcu: 0x0004013000001f02L
|
||||
mic: 0x0004013000002002L
|
||||
ndm: 0x0004013000002b02L
|
||||
news: 0x0004013000003502L
|
||||
nim: 0x0004013000002c02L
|
||||
nwm: 0x0004013000002d02L
|
||||
pdn: 0x0004013000002102L
|
||||
ps: 0x0004013000003102L
|
||||
ptm: 0x0004013000002202L
|
||||
ro: 0x0004013000003702L
|
||||
socket: 0x0004013000002e02L
|
||||
spi: 0x0004013000002302L
|
||||
37
misc/3ds/textured.v.pica
Normal file
37
misc/3ds/textured.v.pica
Normal file
@@ -0,0 +1,37 @@
|
||||
; Vertex shader for rendering textured vertices for PICA200 GPU on the Nintendo 3DS
|
||||
; ==================================================================================
|
||||
|
||||
; Uniforms
|
||||
.fvec MVP[4];
|
||||
|
||||
; Constants
|
||||
.constf ONE_DIV_255(0.003921568627, 0.003921568627, 0.003921568627, 0.003921568627)
|
||||
|
||||
; Outputs
|
||||
.out out_pos position
|
||||
.out out_col color
|
||||
.out out_tex texcoord0
|
||||
|
||||
; Inputs (defined as aliases for convenience)
|
||||
.alias in_pos v0
|
||||
.alias in_col v1
|
||||
.alias in_tex v2
|
||||
|
||||
.proc main
|
||||
; r0 = in_pos
|
||||
mov r0, in_pos
|
||||
|
||||
; out_pos = MVP * r0
|
||||
dp4 out_pos.x, MVP[0], r0
|
||||
dp4 out_pos.y, MVP[1], r0
|
||||
dp4 out_pos.z, MVP[2], r0
|
||||
dp4 out_pos.w, MVP[3], r0
|
||||
|
||||
; out_col = in_col * ONE_DIV_255
|
||||
mul out_col, ONE_DIV_255, in_col
|
||||
; out_tex = in_tex
|
||||
mov out_tex, in_tex
|
||||
|
||||
end
|
||||
.end
|
||||
|
||||
Reference in New Issue
Block a user