Skip to content

CharlesAverill/SuperML

Repository files navigation

SuperML

banner

An interpreter and text editor for a subset of the Caml Programming Language for the Nintendo 3DS.

Great thanks to

  • Notepad3DS as a jumping-off point for the text editor segment of this project.
  • min-caml as a minimal Caml implementation I've based mine on

Progress

Language Features

  • Parser bulit with Flex+Bison
  • Hindley-Milner Type Inference (slightly janky)
  • Rudimentary builtin functions for input and output

Application Features

  • Text editing
  • Development interpreter target for host system
  • Load/Save on SD Card

See examples for some example programs to run.

Installation

CIA/3DSX downloads are available in the releases.

Screenshots

logo code output

Building

Setup

# Install dependencies
sudo apt install -y flex bison

# Install devkitARM (see below)

# Clone
git clone https://github.com/CharlesAverill/SuperML.git

# Install bannertool
git clone https://github.com/carstene1ns/3ds-bannertool.git --depth=1 && cd 3ds-bannertool
cmake -B build && cmake --build build && sudo cmake --install build
cd ..

# Install makerom
git clone https://github.com/3DSGuy/Project_CTR.git --depth=1
make -C Project_CTR/makerom deps -j
make -C Project_CTR/makerom program -j
sudo cp Project_CTR/makerom/bin/makerom /usr/bin

# Build SuperML
cd SuperML
make

Unix

You will need devkitArm which can be obtained with

wget http://sourceforge.net/projects/devkitpro/files/Automated%20Installer/devkitARMupdate.pl
chmod +x devkitARMupdate.pl
sudo ./devkitARMupdate.pl /opt/devkitPro
echo "export DEVKITPRO=/opt/devkitPro" >> ~/.bashrc
echo "export DEVKITARM=\$DEVKITPRO/devkitARM" >> ~/.bashrc
echo "export PATH=\$PATH:\$DEVKITARM/bin" >> ~/.bashrc
source ~/.bashrc

Please note: The env variables need to be available from sudo

Defaults env_keep += "DEVKITPRO DEVKITARM"
Make Commands Action
make
make 3ds The 3ds target will build a <project name>.3ds file.
make 3dsx The 3dsx target will build both a <project name>.3dsx and a <project name>.smdh files.
make cia The cia target will build a <project name>.cia file.
make azahar The azahar target will build a <project name>.3dsx file and automatically run azahar.
make elf The elf target will build a <project name>.elf file.
make fbi The fbi target will build a <project name>.cia file and send it to your 3ds via FBI.
make hblauncher The hblauncher target will build a <project name>.3dsx file and send your 3ds via homebrew launcher.2
make release The release target will build .elf, .3dsx, .cia, .3ds files and a zip file (.3dsx and .smdh only).3

Notes:

  • 2 If you intend to use the hblauncher and fbi targets ensure you have set IP3DS in the Makefile to the ip address of your 3ds on your network.
    • In homebrew launcher press Y and you can netload your 3dsx file.
    • In FBI go to remote install and select Receive URLs over the network.
  • 3 This requires having makerom and bannertool both included in buildtools as 7z files.
  • If you are on windows you will need both of the following in your $PATH (included aswell)

Windows

Install the following using devkitProUpdater:

Note: It is suggested to install dev tools at the root of your disk drive i.e. C:\Development\3ds-homebrew\devkitPro

Once installed, make sure you have access to a C compiler from cmd. If you're not sure install mingw-w64 to C:\Development\mingw-w64 and then add the path C:\Development\mingw-w64\mingw32\bin to your env variables.

Open command prompt as an administrator and cd into the devkitPro installation folder. Some commands need admin rights to properly install. Additionally make sure your antivirus software does not interfere.

Next git clone the latest 3ds_portlibs:

git clone https://github.com/devkitPro/3ds_portlibs.git
cd 3ds_portlibs

make zlib
make install-zlib

Finally, clone this repo and build with one of the commands found in usage.

Credits

All of this would not have been possible without the work of