Repository navigation
Releases: alessioscand/neo-pi
Release list
neo-pi 0.8.0: Universe BIOS
What's new
- Universe BIOS. With
uni-bios_4_0.romin yourneogeo.zip, OPTIONS > SYSTEM can be UNIBIOS. BIOS SETTINGS in the in-game menu opens its main menu at any time, and Start+A+B+C opens its in-game menu. Each game keeps its own Universe BIOS settings (region, mode and the rest), separate from the MVS BIOS ones. - OPTIONS from the in-game menu. The in-game menu is now SAVE STATE, LOAD STATE, BIOS SETTINGS, OPTIONS, RESET, GAME LIST, POWER OFF. OPTIONS opens over the paused game: change the scanlines and see them at once; SYSTEM and REGION apply from the next game.
- Sturdier. A missing BIOS or a damaged
.neofile shows CANNOT LOAD GAME and goes back to the list, instead of stopping. Every game now starts with its memory as at power-on.
Install
- Extract
neo-pi-0.8.0-sd.zipto the root of a FAT32-formatted microSD card. - Copy your
neogeo.zipBIOS file (MAME/FBNeo set) and your games in.neoformat (made with TerraOnion's NeoBuilder) into theneopifolder. - Connect a USB gamepad and an HDMI display (on a Pi 4: HDMI 0, the port next to the power socket), insert the card and power on your Raspberry Pi.
Updating from 0.7.x: copy the new files over the old ones; your neopi folder (games, saves, settings) is kept. config.txt is replaced too: if you had changed it (for example for 720p), make the change again. The testing option writecombine=off is gone: remove it from neopi/neopi.cfg if you had added it.
BIOS files and games are not included with neo-pi. Full instructions and controls are in README.txt inside the zip.
neo-pi 0.7.0: faster response, beam racing, blargg’s NTSC filter
What's new
- One frame less input lag. Each emulated frame now starts with the vertical blank, when games read the pads, and then draws the picture: what you press shows up one frame sooner than in 0.6.4.
- Frame delay and beam racing. The pads are read as late as possible: the frame starts a few ms after the vsync (automatic, per game), and the picture is sent to the TV line by line just ahead of the HDMI output, as a real Neo Geo draws it on a CRT. If a game cannot keep up, it goes back to the normal double buffer by itself.
- COMPOSITE filter. OPTIONS > SCANLINES has a new choice: blargg's NTSC filter, the picture of a composite cable on a TV of the time. Each line is filtered on a CPU core of its own as soon as it is drawn: no added lag, and beam racing still works. On a Pi 3 it still needs some more testing to make sure it stays smooth in every game.
- Faster drawing, so lower LOAD, and less audio delay.
- Pad polling levels: every 1 ms by default, or
usbpoll=500/usbpoll=250inneopi/neopi.cfgfor pads that misbehave at 1000 Hz. - New background and refined button icons.
- On a Pi 3 with
multicore=off, SCANLINES now shows MULTICORE OFF.
Install
- Extract
neo-pi-0.7.0-sd.zipto the root of a FAT32-formatted microSD card. - Copy your
neogeo.zipBIOS file (MAME/FBNeo set) and your games in.neoformat (made with TerraOnion's NeoBuilder) into theneopifolder. - Connect a USB gamepad and an HDMI display (on a Pi 4: HDMI 0, the port next to the power socket), insert the card and power on your Raspberry Pi.
Updating from 0.6.x: copy the new files over the old ones; your neopi folder (games, saves, settings) is kept. config.txt is replaced too: if you had changed it (for example for 720p), make the change again.
BIOS files and games are not included with neo-pi. Full instructions and controls are in README.txt inside the zip.
neo-pi 0.7.0-rc2: lower input lag (pre-release)
This release is all about responsiveness: what you press now shows up on screen much sooner, almost as quickly as on the original hardware with a CRT. It is a pre-release: please test it and report back (see Feedback below).
Changes since 0.7.0-rc1
- Less audio delay. The HDMI audio is handed to the TV in 8 ms blocks instead of 16 ms: sound comes out about one frame sooner.
- USB polling levels. Pads are still polled at 1000 Hz by default; if a pad misbehaves at that rate (double or missed presses, disconnects),
usbpoll=500orusbpoll=250inneopi/neopi.cfglower it, at the cost of 0.5 or 1.5 ms of average delay.usbpoll=nativestill uses the rate the pad asks for.LOG.TXTshows the interval applied to each pad (Interrupt polling X -> Y ms). - Fewer firmware calls while playing. The temperature is read every 4 seconds instead of every second, and the green LED stays on instead of blinking every second (on the Pi 3 B the LED goes through the firmware): less jitter for beam racing, especially on the Pi 3.
- New background for the game list and menus.
- POWER OFF is shown in red in every menu.
Save states from 0.6.4 still load.
Reading the status line
Select + C shows the status line below the picture:
60 FPS LOAD 45% 52 C RACE 2.4 1080P 4X HVS
RACE is the time in milliseconds from reading the pads to the moment the top of the picture starts being sent to the TV: the lag neo-pi adds on its own, not counting the TV's.
- When a game starts, and after every pause (menu, credits, save states), it begins at about 6 ms: the margins start large on purpose.
- Over the next minute or so it settles, as the game proves it can keep up: around 2–3 ms for most games, 3–5 ms for the heaviest ones. For reference, original Neo Geo hardware connected to a CRT can achieve input-to-visible-output latency in the order of just a couple of milliseconds.
- If it goes up for a while and then comes back down, the game just had a heavier moment: that is expected.
- If
DLYappears instead ofRACE, beam racing is off for that game and the number is the frame delay in milliseconds (the reason is inLOG.TXT).
Turning beam racing off
Add this line to neopi/neopi.cfg:
beamracing=off
neo-pi then works the normal way (double buffer + automatic frame delay), still with one frame less lag than 0.6.4. Remove the line to turn beam racing back on.
Installing
Download neo-pi-0.7.0-rc2-sd.zip and copy its contents to the root of the card, over the old files. Your neopi folder (BIOS, games, saves, settings) is kept as it is.
Testing options
The defaults are what this release is tuned for; these lines in neopi/neopi.cfg (one per line) are only for testing and comparisons:
| Option | What it does |
|---|---|
beamracing=off |
double buffer + frame delay instead of beam racing |
framedelay=off |
no automatic frame delay |
framedelay=5 |
fixed frame delay in ms (1-12; too much = stutter) |
Known limitations
- After a long quiet stretch, a sudden very heavy moment can make a few lines arrive late once: you may see a thin horizontal tear for a single frame, then the margins adapt.
- Start-up takes about one second longer (the video scaler measurement).
- Beam racing has been tested on a Pi 4 at 1080p; the Pi 3 and 720p need more testing.
Feedback
neopi/LOG.TXT has everything needed:
- at start-up, the
raster:andBeam racing:lines (if it says not available, please send them: they hold the raw values of the video scaler); - every minute, the
race:lines (time from pads to picture, margins, late lines) or, without beam racing, theframe delayline.
Tearing that keeps coming back in a specific game, or a game that switches back to the normal way: please say which game and which Pi, and attach LOG.TXT. Thanks!
neo-pi 0.7.0-rc1: lower input lag (pre-release)
This release is all about responsiveness! What you press now shows up on screen much sooner, almost as quickly as on the original hardware with a CRT. It is a pre-release: please test it and report back (see Feedback below).
What's new
-
One frame less lag. Each frame now starts with the vertical blank, when games read the pads: the next picture already answers your input, 16.7 ms sooner than in 0.6.4.
-
Beam racing (Pi 4 and Pi 3). The picture is drawn line by line just ahead of the HDMI output, the way a real Neo Geo draws it on a CRT: the pads are read only a few milliseconds before the picture is sent to the TV. Margins adapt to each game; if one can't keep up, it switches back to the "normal" way by itself (more likely with heavier games on a Pi 3).
-
Automatic frame delay. Without beam racing, each frame starts a few milliseconds after the vsync, so the pads are read later (up to 6 ms, adjusted to each game).
Save states from 0.6.4 still load.
Reading the status line
Select + C shows the status line below the picture:
60 FPS LOAD 45% 52 C RACE 2.4 1080P 4X HVS
RACE is the time in milliseconds from reading the pads to the moment the top of the picture starts being sent to the TV: the lag neo-pi adds on its own, not counting the TV's.
- When a game starts, and after every pause (menu, credits, save states), it begins at about 6 ms: the margins start large on purpose.
- Over the next minute or so it settles, as the game proves it can keep up: around 2–3 ms for most games, 3–5 ms for the heaviest ones. For reference, original Neo Geo hardware connected to a CRT can achieve input-to-visible-output latency in the order of just a couple of milliseconds.
- If it goes up for a while and then comes back down, the game just had a heavier moment: that is expected.
- If
DLYappears instead ofRACE, beam racing is off for that game and the number is the frame delay in milliseconds (the reason is inLOG.TXT).
Turning beam racing off
Add this line to neopi/neopi.cfg:
beamracing=off
neo-pi then works the normal way (double buffer + automatic frame delay), still with one frame less lag than 0.6.4. Remove the line to turn beam racing back on.
Installing
Download neo-pi-0.7.0-rc1-sd.zip and copy its contents to the root of the card, over the old files. Your neopi folder (BIOS, games, saves, settings) is kept as it is.
Testing options
The defaults are what this release is tuned for; these lines in neopi/neopi.cfg (one per line) are only for testing and comparisons:
| Option | What it does |
|---|---|
beamracing=off |
double buffer + frame delay instead of beam racing |
framedelay=off |
no automatic frame delay |
framedelay=5 |
fixed frame delay in ms (1-12; too much = stutter) |
framephase=classic |
frames start as up to 0.6.4 (one frame more lag) |
Known limitations
- After a long quiet stretch, a sudden very heavy moment can make a few lines arrive late once: you may see a thin horizontal tear for a single frame, then the margins adapt.
- Start-up takes about one second longer (the video scaler measurement).
- Beam racing has been tested on a Pi 4 at 1080p; the Pi 3 and 720p need more testing.
Feedback
neopi/LOG.TXT has everything needed:
- at start-up, the
raster:andBeam racing:lines (if it says not available, please send them: they hold the raw values of the video scaler); - every minute, the
race:lines (time from pads to picture, margins, late lines) or, without beam racing, theframe delayline.
Tearing that keeps coming back in a specific game, or a game that switches back to the normal way: please say which game and which Pi, and attach LOG.TXT. Thanks!
neo-pi 0.6.4: multiple cores, performance improvements
What's new
- The second CPU core joins in! While the first core runs the 68000, the Z80 and the sound chip, the second draws the video chip's lines and copies each finished line to the screen. The picture is identical, pixel for pixel, to a single core, and every frame is still shown at the same vertical sync: the input lag does not change (measured from the USB report to the start of scan-out, before and after).
- Raspberry Pi 3 B+: even the heaviest games at full speed.
- Scanlines on the Pi 3 too. OPTIONS > SCANLINES (light, medium, strong) now works on the Pi 3 as well, with no slowdown.
- New testing option:
multicore=offinneopi/neopi.cfgkeeps everything on one core, as up to 0.6.3.
Install
- Extract
neo-pi-0.6.4-sd.zipto the root of a FAT32-formatted microSD card. - Copy your
neogeo.zipBIOS file (MAME/FBNeo set) and your games in.neoformat (made with TerraOnion's NeoBuilder) into theneopifolder. - Connect a USB gamepad and an HDMI display (on a Pi 4: HDMI 0, the port next to the power socket), insert the card and power on your Raspberry Pi.
Updating from 0.6.3: copy the new files over the old ones; your neopi folder (games, saves, settings) is kept. config.txt is replaced too: if you had changed it (for example for 720p), make the change again.
BIOS files and games are not included with neo-pi. Full instructions and controls are in README.txt inside the zip.
neo-pi 0.6.3: XInput gamepads support
What's new
- Xbox 360 compatible (XInput) gamepads of any brand. Wired pads and wireless receivers that work as an Xbox 360 controller are now recognised, not only Microsoft's own. This includes receivers that switch to "PC mode" once the pad connects, such as the Nacon wireless controller for PS4.
- "CONNECT A USB GAMEPAD" now appears in the black band above the picture, no longer over the logo.
- Long game titles on the loading screen go on two lines instead of being cut off.
Install
- Extract
neo-pi-0.6.3-sd.zipto the root of a FAT32-formatted microSD card. - Copy your
neogeo.zipBIOS file (MAME/FBNeo set) and your games in.neoformat (made with TerraOnion's NeoBuilder) into theneopifolder. - Connect a USB gamepad and an HDMI display (on a Pi 4: HDMI 0, the port next to the power socket), insert the card and power on your Raspberry Pi.
Updating from 0.6.2: copy the new files over the old ones; your neopi folder (games, saves, settings) is kept. config.txt is replaced too: if you had changed it (for example for 720p), make the change again.
BIOS files and games are not included with neo-pi. Full instructions and controls are in README.txt inside the zip.
neo-pi 0.6.2: Raspberry Pi 3 B+ support
What's new
- Raspberry Pi 3 B+ supported. A lighter audio resampler and a faster build of the emulation core free about 16% of the frame time. On a Pi 3 B+ most games now run at a steady 60 fps, and further optimizations are planned for future releases.
- Game list over the paused game. After GAME LIST from the in-game menu, the game you were playing stays behind the list (and behind OPTIONS), instead of the logo pattern.
- Better benchmark. An empty
neopi/BENCHfile now measures 60 seconds of the game's demo after a 30 second warm-up, lists the slowest frames and writes a profile (neopi/PROFILE.TXT). Handy if you want to help with the Pi 3 optimizations: send me both files. - New testing option:
resampler=speexinneopi/neopi.cfggoes back to the previous, heavier audio resampler.
Install
- Extract
neo-pi-0.6.2-sd.zipto the root of a FAT32-formatted microSD card. - Copy your
neogeo.zipBIOS file (MAME/FBNeo set) and your games in.neoformat (made with TerraOnion's NeoBuilder) into theneopifolder. - Connect a USB gamepad and an HDMI display (on a Pi 4: HDMI 0, the port next to the power socket), insert the card and power on your Raspberry Pi.
Updating from 0.6.1: copy the new files over the old ones; your neopi folder (games, saves, settings) is kept. config.txt is replaced too: if you had changed it (for example for 720p), make the change again.
BIOS files and games are not included with neo-pi. Full instructions and controls are in README.txt inside the zip.
neo-pi 0.6.1: first public release
neo-pi is a bare-metal Neo Geo emulator for the Raspberry Pi: no operating system, nothing to configure. Switch on and insert coin!
Install
- Extract
neo-pi-0.6.1-sd.zipto the root of a FAT32-formatted microSD card. - Copy your
neogeo.zipBIOS file and your.neogame files into theneopifolder. - Connect a USB gamepad and an HDMI display to HDMI 0 (the port next to the power socket), insert the card and power on your Raspberry Pi.
BIOS files and games are not included with neo-pi.
Notes
- Tested on the Raspberry Pi 4. Raspberry Pi 3 support is in progress: lighter games run, heavier ones (e.g. Metal Slug 3) are not yet at full speed.
- Only the first HDMI port (HDMI 0) is used for now on Raspberry Pi 4.
Full instructions and controls are in README.txt inside the zip.