Original Post

It’s finally happening for real this time! Working behind the scenes with some community members, I decided to take an honest swing at an in-house PVB emulator at a full-time capacity. This will be my actual day job. So for the first time in history, I’m going to put my skills to work and produce some actual results. (-:

This community has always been amazing, and I have a good feeling about the emulator initiative going forward. The official project page can be found here:

http://perfectkiosk.net/
__________

So why should you care? Aren’t there Virtual Boy emulators out there already? Let’s see what the project page has to say…

The initiative has four primary objectives:

Nintendo 3DS Emulator
I’m sure most of us thought about Virtual Boy when we first heard about the Nintendo 3DS. A custom emulator specifically designed to run on 3DS can take full advantage of the system’s power and capabilities, giving us true stereo Virtual Boy on the go.

Reverse Engineering
Any time we want to learn about how a game works or make changes to it, we need the right tools to dig in and take a look around. A cross-platform desktop application is just the ticket for providing the user with the right kit to expose all the deepest secrets buried within Virtual Boy software.

TAS
The tool-assisted speedrun is a cornerstone of video game culture, and like reverse engineering, we need the right tools at our disposal in order to get the job done right. The aforementioned desktop application pulls double duty by bringing TAS-focused utilities to the party.

Documentation
Comprehensive documentation of the Virtual Boy’s internals will come from emulator research, and it’s a perfect way for homebrew authors and modders to learn about the system’s features. Those who remember the Sacred Tech Scroll document I wrote can look forward to a brand new version of it.

For further reading of what exactly is planned, refer to the technical document trail on the project page.
__________

How exactly are we gonna pull this off? Glad you asked…

I have enough money in savings to begin work immediately (2018-04-18), but within a few weeks, I’m going to need to rely on financial support from the gaming community. We’ll be reaching out to other sites to gather support, since this undertaking spans a broader scope than what solely applies to Planet Virtual Boy.

A conservative estimate of my monthly expenses comes out to around $500 USD, and with enough interest, I’ll be able to keep this up full-time. By “full-time”, what I mean is 40 productive hours every single week, with status reports and a detailed outline of the development requirements. Planet Virtual Boy has its own developer working for it to make this dream come true. (-:

Donations are managed through a Patreon page:

https://patreon.com/GuyPerfect
__________

For now, this thread will be the place to be notified of progress and for general discussion of the initiative. Thanks again for being such a great community, and for giving me a chance to do what I really love. <3

Special thanks to Fire-WSP, STEREO BOY and KR155E for their assistance in getting the ball rolling.

--Guy Perfect

  • This topic was modified 5 years, 7 months ago by Guy Perfect.
152 Replies

Fire-WSP wrote:
The Nintendo 3DS is nearing its end of lifespan. People will start to loose interest in that platform at one point. This could render the 3DS VB Emu idea quite useless. Of course there will be a 3DS homebrew scene going on after the 3DS death but the usual gamer has long moved on to try the newest hacks on the switch or the next HyperGameboy.

I don’t think that the “usual gamer” would have much interest in the Virtual Boy anyway. But the lovers of stereoscopic or just unique gaming consoles will stay dedicated to the 3DS and surely also are a more matching target group for the VB and this emulator project. The 3DS is more popular, then the VB ever was. But just like the VB, it’s a very unique console – a handheld with an autostereoscopic display.

Also, the emulator will only run on 3DS devices with custom firmware anyway. I don’t think, that especially CFW users will loose interest so quickly in the 3DS. Maybe there even is a chance, that 3DS homebrew will increase when Nintendo buries the 3DS, because CFW users want new games from other sources then. To me, one of the main reasons to install CFW on the 3DS is to expand it’s lifespan, as I belive that it will be kept alive by the homebrew community … look how great even the “stillborn” Virtual Boy is being kept alive 🙂

Fire-WSP wrote:
you do the usual Coder thing. You code a thing and smash it down again just to code it again in the hopes to make it better.

Basically, you’re speaking of perfectionism. And as I also was a perfectionist once, I also know that your request is a very hard thing to ask a Guy Perfect 😉
But of course I get your point. At work, professionals often can not afford perfectionism, due to time and budget. So I first gave it up at work, but kept it for my private projects. During the last years, I made the experience, that it can also be a good thing for private projects, to set limits to perfectionism. I don’t consider any of my latest projects perfect, but I’m still very happy with the results … and happy to actually have so many results 🙂

What are your thoughts about this, Guy Perfect? Do you think, you could set limits to your heart bleed for this project to push it further?

Fire-WSP wrote:
How is it looking on the VB Emulator front?
I got the feeling everthing has slowed down quite a bit. 🙁

It fortunately hasn’t slowed a great deal, but the things I’ve been working on over the past six weeks or so don’t “look” like anything on the front-end, and presenting it here wouldn’t look like a step forward. Every post would be “it looks exactly the same, but it’s better, I promise.”
I’ve incorporated several features that were originally slated for “eventually”, but as the UI was being pieced together, it became quite clear that “eventually” needs to become “ahead of time”, so a lot of planning and preemptive implementation has taken place to ensure the rest of the pieces have a place to fall.

Fire-WSP wrote:
Also I read your posts here very carefully and what I learned is that you do the usual Coder thing. You code a thing and smash it down again just to code it again in the hopes to make it better.
That is not a bad thing but that can get a bad thing if you repeat that to much. I know very well that coders are never satisfied with their own code.

On the contrary, I’m generally pleased with the code I produce, taking the time to simplify the algorithms and carefully document the source. The work I’ve already presented demonstrates that. Over the course of a project like this, certain requirements present themselves after implementation has already begun, necessitating revisions or else those requirements will have to be omitted.

I will say that I made an error by misjudging the task of constructing the UI I envisioned in my head, especially considering the unexpected limitations Java has imposed. I was strongly confident with my designs for the emulation core–code that has remained brilliant since I started work on it–and basically assumed the UI would follow suit. Although I do have the UI under control, it has certainly taken longer than I would have liked and I want to extend my gratitude for everyone being patient while I work with it.

Ernest Hemingway is said to have put it best: “The first draft of anything is shit.” No one wants to read the first draft of a book, or the first rehearsal take of a song, or the first storyboard of a film. Revisions are a regular part of the creative process, so it should come as no surprise that they’re happening with this project as well.

Fire-WSP wrote:
The project is now like 4 month in and is is still about Debugger Windows.

A common misconception regarding software development is that if it looks done it is done, and conversely if it doesn’t look done it isn’t done. I ask that you refrain from making that assumption here. The debugger windows are critically important, not just for the development and reverse engineering side of things, but also because they greatly aid in testing and debugging the emulation core.

One of my earliest attempts at emulation years ago had CPU instructions all neatly implemented, but when it came time to test it and make sure everything was working correctly, I couldn’t. There was no debugging output, so I was somewhat powerless to verify whether my code was as correct as I thought it was. With this project, I can see what the CPU sees: I know what instruction comes next, I know what’s in each register and I know the contents of RAM. The same goes for the VIP and ultimately the other hardware components as well.

Without some sort of debugging interface, the emulator itself couldn’t be debugged. Since the project calls for a debugging interface as it is, it makes sense to focus on that concurrently with development of the emulation core. Every piece of the machine is connected, and each piece supports the others.

STEREO BOY wrote:
Do you think, you could set limits to your heart bleed for this project to push it further?

I don’t know that I’d call it perfectionism. Certain things are, such as retooling something to eliminate senseless duplication, but other things aren’t. Consider the following features:

• Supports multiple languages
• Performant and responsive
• Accessible
• Consistent with system/user settings
• Minimal duplication (-:

These are all somewhat abstract things, except maybe the language one which is easy to visualize. They’re all requirements for the application, but when I started, they were all in that “eventually” category. For example, every time I hard-coded some English-language message, I thought to myself “I really shouldn’t be doing it this way”, and I knew that each one I did would make more work for myself down the road.

I wanted to focus on “results”, and kept letting these things slip by. They ultimately caught up with me, and the excessive duplication of the VIP window was what sent me over the edge. If this was ever going to be anything more than a big steaming pile of first draft, something needed to be done. At first, that was going to be tidying up the VIP window. Then it became the other things.

All of that restructuring is done now. I’m putting the UI back together now, setting it up so the user experience is more or less the way it was before. It looks exactly the same, but it’s better, I promise.

And hey, if you need some hype, I’m proud to announce that the hex editor now honors Scroll Lock! Yeah, if that doesn’t get you fired up, nothing will.

Guy Perfect wrote:
It looks exactly the same, but it’s better, I promise.

And I am absolutely convinced. Please go ahead. And please tell us, if you’re running out of budget. I’ll see if I can raise my support then 🙂
Or, as Ernest would have cheered: ♫ Keeep scrollin’ … scrollin’ … scrollin’ … scrollin’ … Lock! ♫

Any new updates in the last month or so?

He said on my Discord DM with him that the VIP window is doing pretty well. He’s also been in a tight spot with his other personal things. Oh boy, it’s been months since the Java app got updated, and I’m still hyped for the next announcement/release.

Don’t forget that the 3DS’s ARM11 processor is dual-core. It makes it consume more processing power per VB CPU cycle (20 MHz).

Any news on the emulator? 🙂

Fire-WSP wrote:
Any news on the emulator? 🙂

I have a feeling that the project is dead. 🙁

So that means I can stop my paymebts to patreon? :-/

I don’t think you need to, I think he’s canceled it. I didn’t get a charge for his patreon last month

I just checked and I *did* get charged last month as usual, so I don’t think he has cancelled the Patreon. I’ve been backing him since he started with a fair amount in total but he has gone totally dark so it’s probably time to pull back. Too bad. I had such high hopes for the project but no updates of any sort for months is no way to maintain your support.

speedyink wrote:
I don’t think you need to, I think he’s canceled it. I didn’t get a charge for his patreon last month

Actually checking the link on the first page it does look to be active still. My bad, I seriously don’t remember cancelling mine..

TBH, what did anyone expect out of this based on the creator’s behavior? Huge gaps with no information and what little there was it was filled with tangents of how awesome the GUI’s gonna be, how he was gonna code it to perfection from scratch, and so on. It reeks of an immature programmer with sky high goals and absolutely no safe foundation on where to start those from. Since day one he never even showed a PoC running on 3DS. He probably got bored and still expects free money or backed themselves into a corner and is too proud / naive etc. to ask help from the outside. Afraid to say but I wouldn’t expect a VB 3DS emulator anytime soon if *this* is the best effort there is out there.

The last time he showed any real definitive proof he was working on it was way back in June, after such he just made claims until early September then never logged back into PlanetVB since then.

I don’t think we should get the pitchforks and torches or anything, Guy definitely had/has good intentions.

I agree with @speedyink. With a rare few exceptions, this community is very supportive and positive. It’s not like he was scamming us or anything and I’m sure he intended to do what he set out to do. Everyone who backs a project like that knows you are taking a risk because it is an individual subject to own constraints and potential personal issues… it’s not like we hired Microsoft to write us an application. It’s ok to be disappointed but no need to be mean spirited, I would say.

Yeah patreon is still going pretty strong with $95 a month.

I cancelled my membership after the payment today until I see some more progress or some sign of life. I held out a bit longer than I normally do for this, I hope it can still be continued by someone else if he did stop for whatever reason.

I was really looking forward to messing around with making a game after he was done, well damn.

Apologies for the delay. Had something happen that amounts to little more than “a long story” at the end of the day, so I won’t go into details. I feel terrible about the long absence, but I feel great about what I have to show you today…

Who wants to play some Virtual Boy games? That’s a thing now!

The current build is attached to this post, compiled for Java 8.

The Overhaul

Since our last episode, the entire user interface has been redone from the ground up–including the CPU and VIP windows. There’s not much to say for the most part, as it looks and feels the way it always did, but under the hood there’s a lot less duplication of code going around, and component layouts in general have been simplified. Performance is up, stress is down.

Also, the hex editor will honor Scroll Lock when you have a byte selected. Just putting that out there.

All English-language text in the UI now comes from a localization text file that can be swapped out for any other set of localized strings when the time comes to translate to other languages, even at run-time–all controls will be updated to the new text when changing localizations. Right now the only one available is the provided US English, but the groundwork has been done whenever more languages are added.

The much-maligned VIP window overhaul was every bit as horrible as I feared it would be. I went through about a dozen different iterations of it until finally settling on the one that I… well, disliked the least. It’s maybe not the most amazing approach possible, but it’s functional–and best of all, it only ever accesses the data it needs right then and there. It won’t decode anything from VIP memory unless it immediately needs it, and this counts for drawing the displays.

While the VIP window is implemented and functional, the backing code is in a bit of a state of limbo between two different implementations. It’s not broken, and is nonetheless clean and organized, but I still wouldn’t say it’s in a “done” state. One of these days, but for now I’m gonna leave it and move on.

VIP

The Registers tab is the ol’ classic “throw everything at the user” style of interface design. Normally I discourage too many controls on a form, but in this specific case, I feel it’s appropriate:

In the emulation context, the VIP is now implemented to the extent I intended to implement it. The code that renders images into the frame buffers is as optimal as I could make it, though it really does showcase the need for a native-backed implementation in the future. Nonetheless, it’s all lean and mean, and runs reasonably smoothly on my sorta-nifty computer.

Console

Hey, this is new! It comes in red/cyan and green/magenta flavors with use of Ctrl+3:

To run the program, press the F5 key. Or F8, or Pause. They all do the same thing. Press it again to pause the program.

Controls are quote-unquote “supported”, and you’ll have to click in the middle of the Console window after the program starts running before they’ll register. The following keys map to controller buttons:

• F = A
• D = B
• S = Start
• A = Select
• Up = Left Up
• Left = Left Left
• Right = Left Right
• Down = Left Down
• I = Right Up
• J = Right Left
• K = Right Right
• L = Right Down

While running, the debugger interfaces will not be updated. Once the program is paused, the debugger will reflect the new state. At the moment, debugger controls remain active even during active emulation, so you probably shouldn’t go changing settings in there manually. I mean, you could do it, but I can’t promise nothing ugly will happen.

Granted, the thing runs a bit slowly in the Java implementation, but the important part is that it works. At long last, it plays games!

Unimplemented Things

The following system features remain unimplemented and may cause issues when attempting to run Virtual Boy software in the emulator:

• Audio
• Game Pad (the current controls support is a dirty hack)
• Timer
• Wait Controller
• Link port
• Bit string CPU instructions
• Floating-point CPU instructions

On the other hand, interrupts and exceptions are implemented, and the VIP module takes full advantage of that. Homebrew games that use VIP interrupts ought to work just fine (provided they don’t use any other interrupts).

  • This reply was modified 5 years, 9 months ago by Guy Perfect.

There’s just one thing missing here in this update: a column table tab.

You guys ever thought the column table of the VIP was useless for graphical effects? Well, nope.

 

Write a reply

You must be logged in to reply to this topic.