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:
Andrei Alexandru
2025-12-17 13:17:57 +02:00
commit c71492f846
1248 changed files with 422858 additions and 0 deletions

127
misc/3ds/Makefile Normal file
View 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

Binary file not shown.

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

38
misc/3ds/offset.v.pica Normal file
View 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
View 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
View 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
View 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