What is NX?
The short answer is, it’s the future of LowRes Coder! The long answer I’ll try to explain quickly: I’m working on a new core, the part which executes your code and simulates the classic game console. I call this LowRes NX and it’s an open source project, made with portability in mind. When it’s ready, I will take the current LowRes Coder app for iOS, replace its core, and publish it as a new app called LowRes Coder NX.
What’s different from LowRes Coder?
The current LowRes Coder evolved over more than two years into what it’s now. But with more planned features I felt it became incoherent, also because I never had completely clear what kind of system I wanted to simulate and limitations were arbitrary. For LowRes NX I decided to make a realistic simulation of classic game console hardware. It’s not only about how it looks and sounds like, but how it actually works!
What hardware does NX simulate?
LowRes NX is designed as an 8-bit system mostly inspired by the Game Boy Color. Some additional features, like parallax scrolling and bigger sprites, are very similar to the Mega Drive, although everything is a bit simplified. The only thing LowRes NX doesn’t simulate is a CPU. Instead there is a BASIC interpreter, as I didn’t want to make it too complicated!
- 32 KB cartridge ROM
- 8 KB video RAM
- 16 KB working RAM
- 160×128-pixel screen resolution
- 256 8×8-pixel characters, used for sprites and backgrounds
- Characters have 3 colors + transparency
- 8 programmable color palettes + backdrop color
- Two backgrounds with each 32×32 tiles
- Backgrounds are scrollable and wrap around the borders
- 64 sprites
- Sprite sizes are 8×8, 16×16, 24×24 and 32×32
- Attributes for background tiles and sprites: palette index, flip X, flip Y, priority
- Input by game controllers with d-pad and two buttons
- Optional input by keyboard and touch/mouse
Note: The number of characters, sprites and backgrounds are limitations for what NX can show on screen simultaneously. Your game can have as many as you can fit into the cartridge ROM!
How does it compare to other fantasy consoles?
I decided to create NX after I discovered the amazing PICO-8, a desktop application similar to LowRes Coder. And it seems that fantasy consoles are a thing now: I also found TIC-80, Pixel Vision 8 and many more in development. LowRes NX was made with the same idea, but has some important differences:
- Others use Lua as the language, which is a good way to learn simple but modern programming. NX uses BASIC, which is simple but not so modern. It may even harm your programming style, but personally I think it’s fun (especially if you usually try to write clean code).
- Others have a screen buffer where you just draw anything you want. This is the standard for modern game programming, but it’s not the way old game consoles worked. In NX you don’t draw anything, there is not even a screen buffer. You just have your two tile-based backgrounds and 64 sprite objects. You can move them, set their characters, colors and attributes, and even modify everything in any scanline of the screen! This way you learn basic concepts of consoles like the NES, Game Boy, SNES, Master System, Mega Drive (Genesis) etc.
- Others have a fixed memory layout for the cartridge ROM, which is copied to RAM when a program is run. This makes it very easy to get started, but things get dirty when you want to liberate your program from the given limits. NX has a fixed layout for video RAM and registers, just as old hardware, but the cartridge ROM can be filled with any data you wish! You can decide if you want to use its space more for graphics, or more for maps, or more for music. And all the data in ROM is directly accessable by your code, there is no need to copy it to RAM (except for graphics).
- Others have built in tools for graphics, maps and sound. This makes them easy and quick to use, but less flexible. Tools in NX are actual BASIC programs, which you can change if needed. To share data between a tool and your game, NX simulates a simple disk drive, which stores data in the same format as used in your game code.
- NX and its tools are designed for mobile devices with touch screens, while keeping it compatible with desktop systems. The built in tools of other fantasy consoles have small buttons and require a mouse. Games may be playable on mobile devices, but currently their editors don’t look like they will work.
- Others are made with portable frameworks, run on Windows, Linux, Mac and even on the web. NX is made in a portable way, but still needs some work for each platform. It’s a point for them, but I like native programming for OSs. I feel like NX is already a platform independent framework, so I don’t want to wrap another one (like SDL) around it. Currently NX is planned for macOS as a simple player (but can be used for programming with an external editor), and for iOS as a full app.