XaiJu
FPGAzumSpass

FPGAzumSpass

patreon


FPGAzumSpass posts

Special fast clocked core

Hi Everyone,

one topic that seems to be important for a lot of people is the speed of the core. While it is already at least as fast as the original console, some games struggle a lot with low performance.

I often get asked if the core could ever do something about it. I have to say, this is not easy, because the core was very difficult to fit in the DE10-Nano at all, so how could there be even more room? I wanted to know myself how much clock speed reserves we still have the core...

View Post

1 year of development

Hi Everyone!

Today I want to look back at what happened this year, where we came from and how everything has turned out.


January

On 2nd of January I created a N64 test folder on my computer. The purpose was to write some assembler tests in the style of the PSX timing tests I had written before, to find out if a N64 would be feasible at all on MiSTer.

While the PSX2X core had shown that a 32bit MIPS CPU could run at about 66 Mhz, there are mo...

View Post

100% TLB and 100 % booting

Hi Everyone,

the core reached two major milestones before the end of the year, so let's take a look at how that was reached and what the current status is.


100% booting

In the last week all of the non-booting games could be fixed and show signs of lifenow. This includes: Battletanx, Indiana Jonas, Star Wars Battle for Naboo, Fifa and WaveRace Shindou.

100% booting means that every official game will show at least something. Few games might s...

View Post

More TLB progress

Hi Everyone,

I spend most of the 10 days since the last post with the TLB. Doing the implementation in hardware, where everything happens in parallel is more difficult than in software, but I made good progress:

- several new games are playable. Some examples are Goldeneye, Perfect Dark, Re-Volt, Shadowman and Turok2.

- more features are working now. Most notably the instruction cache does now work together with TLB translated addresses

- over 10 bugs in the CPU relate...

View Post

TLB progress

Hello Everyone!

I started with the work on the TLB implementation and made some good progress over the last week. There are already a bunch of games that are playable now, which have not been before:

Castlevania, Goemon, Bomberman, Paper Mario, Rakugakids, Killer Instinct, Mario Golf and some more.

Some others however don't work yet. Why is that? Let's see.


Virtual address memory access

The name TLB itself is kind of misleading for the...

View Post

Write Fifo and more

Hi Everyone,

one of the missing CPU features has been implemented for the N64 core last week and we will take a look at it today. But before the technical details, we take a look at the other changes since the last post:

- fix z-Buffer regression in 32Bit color mode

- fix interlace video for analog out

- shift video centering to match original hardware

- pass through all PIF commands for NSAC (e.g. VRU microphone)


Two other new features I want to...

View Post

VI - Async video out and more

Hi Everyone!

The first of the open tasks from the last post is now mostly implemented. What again was it useful for? You can see it in the title image.

The core previously used the main system clock of 62.5 Mhz to generate video output from it. The N64 however was using different clocks for the video output: 48.68 MHz for NTSC and 49.65 Mhz for PAL, so the framerate didn't match exactly.

That is also the reason why it's called async: the video clock is asynchronous to the sy...

View Post

Open tasks

Hi Everyone!

I got a lot of requests about an overview of the project and what things are still to do, so this post will cover it in detail.

First, let's sum up the progress in the last week:

-  A hang in several wrestling games and NBA 99 hang was fixed

- Noise dither and Alpha noise implemented, can be seen in the Mario warp effect

- Texture clamp and mirror in copy mode fixed, used in the texts in StarCraft 64

- RGBA correction implemented: subpixel...

View Post

Bugfixing details

Hi Everyone!

after completing most of the VI work, I went back to fixing bugs on the N64 core. Today we will look at some of them. Instead of just listing every one, I will pick some and tell more about them in detail, as I think this is more interesting.

We start with the most important one: the RDP command interface rewrite.

You can see in the left image that some letters are miss...

View Post

Video Interface processing

Hi Everyone!

With the VI video processing pipeline being implemented now, I feel ready to tell you about all the features it can do. We will do this today step by step, looking from the big picture and zoom in on every component in detail.

Let's have a look at the overview first:

We have a data flow from the RDRAM holding the framebuffer to the VI processing the data and then output...

View Post

17 days of progress

Hi Everyone!

As the last post was about one fix alone, this post will cover all the others changes of more than 2 weeks. The list is long, so let's start!


RDP: fix load block overflow when loading max line length

The result is visible in the screenshot of this post: Kirby is no longer freezing when going ingame. 

The reason for this crash was that the loading pipeline hang up. The pixel counter is checked to be greater than the required...

View Post

My most wanted bugfix

Hi Everyone!

Today we will look at the technical details of a bugfix that I have done 2 days ago and that made so many games playable. It is kind of a bug hunt journey, as the path to fixing has been like a maze with many dead ends. Even the solution alone holds so much details that it could cover a whole article. Please forgive me if the details are too deep, but I'm excited about it and want to share it.

But before we start: There have been plenty of other fixes and updates the ...

View Post

SRAM saving, PAL, Fog, Faces and many fixes

Hi Everyone!

10 days passed since the last update and we can look back at the changes. It's way to much to explain all of them here, but you can see the full list at the end of this post if you really want. Instead I will focus on the main changes in this version.

First I want to thank everyone for joining my Patreon. It really means a lot to me to see all the support. The last weeks have been pure fun for me with the core really coming to life so I can already play some games fro...

View Post

Datacache, Texture Filtering and more

Hi Everyone!

It's only been a week since the last post, but there have been plenty of improvements and new features in the core, so let's take a look at what these are and how they work.


First new feature was two pass rendering for the RDP:

In two pass rendering mode the RDP can apply additional effects to a pixel. For example blend together two different textures, apply ...

View Post

RDP progress

Hi everyone,

after working on the RDP for 10 more days, I want to use this post to tell you more on the recent changes and the technical side of them.

First, let's look at the overview of the RDP and the status in the core:

Improvements have been made mostly for:

- Texturing (including perspective correction and transparency)

- Z-Buffer

- Copy mode

To give yo...

View Post

First 3D games booting

Hi everyone,

I worked on the RDP in the last 2 weeks to get the first basic drawing features implemented into the core. While testing them, I was shocked to noticed that Mario Kart 64 was booting up fully until ingame. I really didn't expect it at this point in time already, so it's a nice surprise.

Of course the RDP is far from complete and if you look at the screenshots, you can see that clearly. Furthermore all games seem to have a high chance of randomly hanging, so don't expe...

View Post

How fast is the RSP?

Hi Everyone,

todays progress update will go into some technical details of the RSP and I think they can be presented best by comparing the RSP against other systems I worked on in the past.

If you still have the tasks from the last post in mind, then I can tell you that 2 of them have been completed:

- implement Scalar Unit access to the RSP/RDP registers

- implement Vector Unit (decoding, memory access, processing)

That leads to the great result of the RSP passi...

View Post

First RSP steps done

Hi Everyone,

let's look together at the progress since the last post and the plan for the next weeks. We will also look in detail at the RSP this time, to understand what the progress even means.

First let's sum up the changes, then go into detail:

- EEPROM handling was implemented. That means games like Mario64 or Mario Kart can now initialize the EEPROM at boot time and read/write data. Without that, these games would never boot, so it was important to have that ready. The...

View Post

First game playable

Hi Everyone!

Just a short update from my side. I've been mostly working on the serial interface(SI) DMA and the PIF controller interface. Both together are required for getting controller inputs to the game. As a lot of software will busy wait until this SI DMA completes, they just hang when it was missing.

After it was implemented a lot of homebrew started to work and yesterday wark91(thank you so much for all the time you spend!) found that Namco Museum 64 was indeed working...k...

View Post

FPU done

Hi everyone!

Great news this time: I could finish the FPU implementation much faster than I thought. Furthermore it even costs less resources than I thought. 

But let's do things step by step. I have seen a lot of responses over the last weeks of people not knowing what a FPU really is and what it can do, so maybe it's time for some technical article again. 

This time I want to try something new: Instead of going into technical details, I want to try a very simple ...

View Post

FPGA FPU work started

Hi everyone,

there has been good progress in the last week, much more than I thought I could reach. Let's recap the last post:

My soft floating point implementation for the emulator was still missing plenty of instructions. It turned out that the more you learn about it, the faster you get. So in the end I spend less time for all the missing instructions than I have spend for the ADD instruction I began with.

This means, that my emulator now has a low level integer only impl...

View Post

CPU and RDP progress

Hi everyone,

several things happened over the last two weeks, so I want to summarize them for you and tell you about the current work.

The COP0 part of the n64-systemtest, mentioned in the last post, is now fully working. The change was some edge case handling of reserved COP0 registers. But after fixing it, I noticed that the other CPU subtests (exceptions, traps, overflow) cannot be tested now, because the n64-systemtest does require the FPU(Floating Point Unit) for them.

...

View Post

CPU progress and scope

Hi everyone,


I've been working mostly on the CPU part of the N64 core in the last 2 weeks and made some good progress there. Yesterday was finally the moment where the wonderful n64-systemtest started to work on the core.

This alone is great enough, but it will also to allow to track the progress and regressions much better, see what is still open to be done and also helps fixing these things.

So let's take a look on what this testsuite does test on the CPU part a...

View Post

FPGA core

Hi everyone!

Today I want to kick off the FPGA part of the N64.

It means that you will find the very first core build attached to this post.

Also the GitHub repository is open for you to take a look at the VHDL code or read the changelog as your daily newspaper :)

https://github.com/RobertPeip/Mister64


Before you transfer over some games to your SDCard and are frustrated tha...

View Post

DDR3 Tests finished

Hi everyone,

in the last post I told you that I want to write a DDR3 test core. This is done now and I want to talk about what this core can do, how it works and what the results mean for the N64 core.

The repository can be found here:

https://github.com/RobertPeip/MiSTerDDR3Test

I also attached a RBF of it at the end of this post. Be aware that it was only tested with HDMI out, I don'...

View Post

N64 Systemtest fully passed

Hi everyone,

I want to report to you after a huge milestone was reached.

As mentioned in the last post, i was working on 3 major topics in the last days:

- TLB in the CPU

- PAL timing

- save memory

Let's look at it in detail:

PAL timing was really no big issue in the end. Mostly the dots per line and the lines per frame are different. This alone did allow for a large amount of PAL games to also boot now.

Save memory was another door opener: game...

View Post

Progress and Schedule

Hi everyone,

first I want to welcome all the new Patrons who joined in the last 10 days. It was absolutly amazing to see this huge positive response, even with the project still being in the early phase. A big thanks to everyone, of course also to the long time supporters who stayed here without knowing what will come next.

So what happened in these last 10 days?

Maybe some of you have already seen some of the screenshots and videos on Twitter: I worked most of the time on t...

View Post

I'm just a dreamer

Hi Everyone,

I finally need to reveal what I'm working on. 3 months of relative silence is quite a bit and my emulator is about as far as where my PSX emulator was when I revealed it, so let's do it today.

Also with all the time I already spend and how important that system is for me, I will not give up anyway now, even if things get difficult. 

You can already guess with the screenshot what system it is: my childhood dream, the N64.

Wait, wasn't that impossible o...

View Post

First games booting in emulator

Hi Everyone,

I finally managed to get the first games booted in the emulator for the new system. This is a huge step for the project, as the components I tested seperate before must now work hand in hand together. Also the motiviation always gets a boost when this happens.

I even got one game more or less fully working, but with some visual glitches. However, most games have severe graphical glitches and about 2/3 of those games I tested refuse to start at all. Still, I'm happy th...

View Post

Audio is implemented

Hi Everyone,

I got the audio output of the new system working in my emulator!

Audio has always been tricky for me, because of two reasons:

- it's hard to compare to original output without tools and even then it's not bit perfect comparable like video if the output of the original system is not digital already.

- in an emulator, you must reach 100% speed, otherwise it sounds like garbage

To implement audio I made the emulated CPU slower, so i can reach around 100...

View Post