We're using cookies to ensure you get the best experience on our website. More info
Understood
@horvatmRegistered December 28, 2008Active 5 months ago
581 Replies made

I was involved in this almost a decade ago! It’s great that you found a new team. I wish you the best of luck!

After more than 8 years, there’s now a new version (1.5) with a few fixes and improvements.

Great work! Thanks for doing this.

I later also found some unused music and sound effects which you may have missed.

I have added links to your article and the interview to my Virtual Lab “fan page”.

I hope you know that most homebrew games (mine included) are sold without their creator’s approval and that you didn’t include those.
(Not trying to be dismissive of your book or anything, it’s just how it is.)

If you’ve looked inside the executables, you have probably seen what looks like Lisp source code. My guess is that at least CPARSE and CGRIND are partially written in Lisp, and “.CL” may stand for “Common Lisp” or “compiled Lisp”.

If you look at the included V810 assembly files, you can see that they all start with the “ISV810” directive. If you look inside ISAS.EXE or ISAS4G.EXE, you can see that it also contains the strings “IS65” (65816?), “ISSFX” (Super FX?), “ISDMG” (Game Boy?) and (what looks like) mnemonics for those architectures.

So yes, I think the VUCC system was not specifically developed for compiling V810 code, but that V810 support was simply added as just another target architecture. The executables also seem to support a few undocumented command line options. You can start with trying to get ISAS to assemble some 65816 code and if that works, try to reverse engineer the .CL files to reconstruct the 65816 code generator (easier said than done, I know).

Red Dragon can show you the contents of BGMaps in memory as well as individual worlds (layers). I think Guy Perfect’s emulator has those features as well, possibly with a better user interface.

VN10459666[9] – American model, found in Slovenia.

I tried it in Mednafen and it does write something to the SRAM if you choose “yes”. I guess it works.

If anyone does this, please use a dead unit with no chance of repair. Do not destroy a working Virtual Boy.

The NVC is not just a modified V810, by the way. It also contains the timer and communications logic for the controller and link ports.

Chapter 5 of the V810 hardware manual might answer your question.

You just record audio from the headphone jack.

There is no standard sound/music format for Virtual Boy games. Maybe some games share the same format (for example, if they are from the same company), but at least some games have their own unique sound engines.

Cool! And thanks! ♥

thunderstruck wrote:
I actually found allot more (very disturbing) images that had not been mapped by HorvatM yet as well.

Disturbing? I don’t remember seeing anything that wasn’t already shown in the game. But I know I haven’t mapped the whole ROM yet. If you tell me the addresses, I’ll add them to the list.

Guy Perfect wrote:

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

Any ideas for how that might be visualized?

With a list/table with two columns (“repeat” and “time”) that can be edited. The result would be shown on two screen-sized pictures (slightly wider) where each column would be represented by one or more columns of pixels (depending on “time”), their color being determined by the “repeat”. The column currently selected in the table should be highlighted somehow.

If anyone has a simple test ROM handy that just does timer functions, see if it works correctly in this build of the emulator. Otherwise I’ll draft one up for next week to verify that everything is working as intended.

I tested it with a private/work in progress ROM. It doesn’t do just timer functions, but I did notice that despite the timer interrupt being acknowledged (and EIPC set correctly), upon executing RETI, the PC was again set to FFFFFE10. The ROM works in Mednafen and it worked on hardware the last time I tried it, and I don’t think I changed the timer code since then.

And Deathchase, for whatever reason, resets when entering the first level, though it does not use the timer. The source code is available if you want to investigate.

I don’t have either game, but the PVB Usercenter might be helpful here (sorted by collection size).

So far, 648 users have indicated they have a non-empty collection. It might be possible to extrapolate some numbers from that data if KR155E runs some queries on the database, or at least see how common each game is in the members’ collections.

You don’t need a degree in computer science to make games for the Virtual Boy (though it won’t hurt).

But the Virtual Boy may help you get a job. 😉

Those “advertising” messages are normal. If you are using batteries and they are about to run out of power, you will also see “batteries low”.

I have attached a patch that you can use to remove all those messages except “batteries low”.

Attachments:

I had a quick look at the ROM. The main debug menu function (which prints the “round select” string at 40140 by calling 2E2C) seems to be at FF6 (F20 in “Kitaro’s” ROM), but it is indeed not called from anywhere.

If you set the PC to 7000FF6 in Mednafen’s debugger, you will get there, but the text won’t be visible because the worlds/charsets are not set up. From there, you can press L or use the left D-pad to get to the round selection mode (which seems to be buggy), or A to go to some other menu (function AA4), which will play one sound and then freeze.

At 12AA is the sound test function. You can access it by first setting the PC to 7000FF6, then to 70012AA (but not directly or it will freeze). You can use the left D-pad and A to choose and play sounds. Again, nothing of use will be visible on the screen.

To summarize, the important addresses are:
5CC: vbReadPad equivalent, never called directly but only from 7F4
AA4: Function that references the “another stage” string
7F4: Wrapper for 5CC, also resets the game on L+R+B+A+Select+Start
8BE: Called from within FF6, indirectly calls 5CC
FF6: Main debug menu function, references the “round select” string
12AA: Sound test mode function, references the “sound test mode” string
2E2C: Text printing function?
40000: “another stage”
40140: “round select”
4014D: “sound test mode”

I don’t have the source code (what are the rules regarding its usage anyway?), so this is just a stab in the dark. You might already know all this.