At the progressive F# hackathon yesterday I set myself the task of getting something written in F# running on a PlayStation Vita. It’s something that I’ve wanted to do for a while now and thought there was no better time to try it. Here’s the results running on an actual device which is always a bit more impressive than just running it within an emulator.
How to do it
- The first thing you’ll need is a Mono compatible version of FSharp.Core 4.3.0.0, the quickest way I found to get this was to download the fsharp_30 branch of the fsharp tools from http://github.com/fsharp/fsharp and in the FSharp.Core.fsproj add the defined symbol CROSS_PLATFORM_COMPILER. I also removed the listed references and instead added those provided by SCE in C:\Program Files (x86)\SCE\PSM\mono\lib\mono\2.1 and then run the fsharp-library-build.proj file with MSBuild
- Create a new F# library project (I did this in Visual Studio)
- Remove all of the references. Add a reference to FSharp.Core which you just built. Add a reference to all of the Sce.PlayStation dlls listed in C:\Program Files (x86)\SCE\PSM\mono\lib\psm Add references to System.dll and mscorlib.dll as provided in C:\Program Files (x86)\SCE\PSM\mono\lib\mono\2.1
- Delete all of the files in the project and add a new file called game.fs replace it with the following code
namespace TestPSMLibrary open Sce.PlayStation.Core.Graphics open Sce.PlayStation.Core.Environment type Game() = let graphics = new GraphicsContext() member this.Run () = while true do SystemEvents.CheckEvents () graphics.SetClearColor(127, 127, 127, 255) graphics.Clear () graphics.SwapBuffers () ()
- Build your library project
- Open up PSM Studio and create a new PSM Application
- Add a reference to your library project as well as the version of FSharp.Core you built in Step 1
- Replace the contents of main.cs with the following
using System; using System.Collections.Generic; using TestPSMLibrary; namespace TestApplication { public class AppMain { public static void Main (string[] args) { var game = new Game(); game.Run(); } } }
- Run it in the simulator or on device and you should see a grey screen
One comment