What's new

Worklog Some PS2 Project

Joined
Sep 27, 2016
Messages
467
Likes
1,046
Thanks for the suggestion! I reached out to them, but unfortunately they were not able to assist with a custom screen lens :(
I was told that they are not offering this as a service, so I think a custom glass screen lens is finally off the tabe.

I also received the custom tempered glass screen protectors I requested from a local shop and those were a flop too. The glass layer was only about 1/3 of the overall thickness and it was not possible to peel the 2/3 of plastic off without shattering the glass.

The option of manufacturing a screen lens myself from 1mm PC sheets actually worked quite well. For that I designed myself a little jig to cut the shape with a scalpel and another fixture to paint the bezel on the backside. The paint I used was a can of Tamiya PS-5. This would indeed be a feasible option, but the lens scratches very easily - After a week of daily driving the portable during my commutes, the lens was all scratched. (bumping the thing around in my backpack certainly didn't help...)

While I was experimenting with the PC lenses my package from aliexpress arrived...
All 3DS XL screen lenses were nicely packaged and look quite good. Overall size is about 113.2x70.7mm, the window is about 107.2x64.4mm and the tickness is exactly 1mm. The corners are asymmetric, 2 corners have a ~3.5mm radius and the other 2 have a ~1.5mm radius. The adhesive is as cheap as the price suggests, but it can be peeled off very easily to use other methods of attaching the lens to the housing.
I continued by printing an adjusted version of the front housing to give it a try - and while I wasn't a fan of the thin bezels in the beginning, I think I got used to them now:

View attachment 36646
This will be the one, I think. The window perfectly fits the visible display area vertically, horizontally it's just a little bit too narrow (by ~1mm). It's not a issue when playing games at 4:3 aspect ratio, and once I have the scaler running I can take this into account too. The adhesive didn't stick to the PLA shell (possibly due to the layer lines), so for now I attached it using 2K epoxy. I'm really happy with how it turned out!

The next important tasks would be working on the FPGA and creating another revision of the gamepad flex, to fix the protruding power button (seriously, the portable turned on twice in my backpack this week). I expect work and life to be a little bit tough in the upcoming months, so progress could potentially slow down a little bit. But I hope I can manage to get some productive hours during the christmas holidays.
Awesome! Glad the 3DS XL glass lenses worked out. I noticed it slightly cuts off the image a little when I was testing them as well, but it is not too bad to where I couldn't tolerate it and sounds like you came to the same conclusion.
 
Joined
Apr 6, 2020
Messages
116
Likes
320
Me and another member were looking into driving the 24 bit RGB signal directly as well and I have some measurements that might help. Here is the HS, VS, and pixel clock measurements. I accidentally named HS HV, but just know it's HS haha. These files can be opened using Saleae logic analyzing software. This was measured on a 90001 PS2 on the home screen. Hope this helps!
Are these measurements made on the PS2 NTSC or the PS2 PAL?
 
Joined
Dec 25, 2022
Messages
48
Likes
446
Location
Landeck, Austria
Update time!

As hinted in the last update, I’ve been busy with another project, which will be finished in about a month. Luckily that did not stop me from spending some spare time on the PS2!

Travel case and SD2PSX
I’ve been using the prototype almost daily for 2h during my commutes, probably for more than a month now. It’s great! The battery life is about 4.5h at full brightness and headphones, which is a lot more than I originally intended to implement. I did notice some bugs in the firmware that need fixing in the future (like the gamepad not working after turning the system off and on a couple of times while charging).

To give the portable a bit of protection I designed a little travel case:

IMG_20250215_225717627.jpg
IMG_20250215_225742549.jpg

(The color is on purpose, so I find the damn thing again)

The original 8MB memory card turned out to be a bit of a bottleneck – I only have one and it’s full already, after finishing about 6 games! But there is hope… luckily, the PS2 scene is innovating at a crazy rate nowadays - I was made aware of the SD2PSX(td) project, which might solve all my storage issues.

I ordered a PSxMemCard Gen2 for testing and it does indeed work great! While the OPL MMCE beta 2 had some game compatibility issues similar to the MX4SIO (actually the same games didn’t work), the load times were a noticably faster and there was slightly less stutter than MX4SIO.

From experience, neutrino offers better compatibility on MX4SIO, so naturally I wanted to try it with MMCE. The only MMCE compatible launcher I could find was NHDDL (apart from XEB+ neutrino launcher). After installing the NHDDL MMCE beta 3 and neutrino 1.5.0 on the SD2PSX boot card, I was impressed to see it working as well as the previous MX4SIO setup I had. All games I tried were running fine and there is finally all the memory card space I ever need on a single device! This might be my new setup of choice!

Just the test setup is very sketchy:

IMG_20250215_230218289.jpg


To make this a bit more usable, I was looking for ways to integrate it into my portable. I decided against integrating it internally on the memcard flex early on, as I would like to keep both memory card slots fully functional. With all the advancements recently, who knows what comes next and whether it's compatible to the SD2PSX. If the 2 SD memory card slots will stay, it means that the SD2PSX will need to shrink to the size of an SD card. This enables the use of a SD2PSX, while keeping compatibility to MX4SIO and my SD memory card.

Thankfully the SD2PSX hardware only consists of an RP2040, SPI flash, PSRAM and micro-SD slot, after removing the display and buttons. In the beginning I thought this would be an easy fit, but in the end it was tight with all the signals needing accessible test points at the back. I also had to use smaller packages for the flash and PSRAM to make everything fit & select the smallest micro-SD slot I could find -> this one has no latching mechanism, which would take a lot of space.

This is the current state:

Screenshot 2025-02-15 230007.png
Screenshot 2025-02-15 230025.png


Both the flex PCB and the components were ordered. You see there are no buttons and no display – they are actually not needed for general use. My only concern right now would be the missing I2C display preventing the firmware from functioning (I really don’t want to modify the firmware, but I will if I have to). The whole PCBA will be adhered to a 3D printed frame to create an SD assembly similar to my SD memory card.

Next topic: FPGA
I was refactoring a lot of the video processor implementation and creating a top level block diagram to better plan the integration with the syscon. To get back into the topic, I wanted to replace the hybrid motion adaptive deinterlacer with a proper 4 field motion adaptive deinterlacer.

Screenshot 2025-02-15 225911.png


This however was not trivial, a 4 field motion detector requires 33% more framebuffer bandwidth compared to my previous hybrid implementation. In order to achieve such an increase I had to completely rewrite the framebuffer scheduler, video decoder module and the deinterlacer. There were 2 distinct enhancements to the architecture:
  • The video input module is no longer sampling the black borders horizontally (they are now added back by the scaler module when in 4:3 mode) – 33% improvement
  • The 3-byte pixel data is now packed into the 4-byte wide SDRAM data bus and gets unpacked by a ringbuffer in the deinterlacer module (before the upper byte of the SDRAM data was unused) – 25-30% improvement
Another issue was the SDRAM itself. Reading and writing from very different addresses in the same bank has a huge hit on bandwidth, because each time an address row must be opened and closed.
The hybrid deinterlacer had no issues, it needs 3 banks to read and 1 bank to write, and the SDRAM has 4 physical banks in total. For the 4 field deinterlacer I need 4 banks to read and 1 bank to write -> 5 banks in total. Luckily, each bank has enough space to fit 2 frames, so I decided to split each bank to create 8 “virtual” banks with the bandwidth limitation above.
In order to reduce the bandwidth impact, I changed how the scheduler handles reads and writes: The scheduler now tries to avoid switching between read and write as much as possible, often reading a full line before it schedules a write to the SDRAM. Before it was alternating between read and write after every burst, which would have resulted in a disastrous bandwidth reduction using the new banking scheme.

These enhancements to the data path made it possible to finally implement a 4 field motion detector! And it works!

The old motion implementation had its weaknesses in 50/60Hz games, due to the reliance on the error-prone 2 field motion detector. This is exactly where the new 4 field deinterlacer shines, the combing artefacts are almost completely gone in 60Hz games compared to before. With some tweaking of the motion thresholds, it could still be improved further. The performance in 25/30Hz games is about the same. The video delay of one field (16-20ms) from GS output to displayed image is also the same.
Flickering on very fine horizontal details (the horizontal lines in OPL are a prominent example) is completely eliminated in the new implementation. This was caused by the vertical averaging performed in the 2 field motion detector, leading erroneous motion detection.

After doing the new deinterlacer I started researching for the scaler, writing down the required calculations and thinking about the state machine. This is the point where I am right now, I should also focus on thinking about how to best implement the hardware sprite module and in general the interface to the syscon.

Boot rom flex
I had another boot rom reverse engineering session and using the information @wisi provided, together with my notes from previous sessions I finally figured out how to properly decode the CS lines. This enabled me to design a tiny boot rom replacement in the size of the original chip:

Screenshot 2025-02-15 230534.png
IMG_20250208_134141381_HDR.jpg


The original flash indeed has 3 CS lines – /CS1, /CS2 and /PPCS.
CS2 and PPCS access the same data while CS1 accesses the DVD rom. Using 2 AND gates it’s possible to generate one CS for the new flash. Of course, pre-deckard PS2s are missing the PPCS, so in order to make those compatible I added a pullup to PPCS (in the service manuals I saw that this pin seems to be either connected to VCC or floating). A22 also doesn’t seem to be connected on all PS2 models, so I’m basing it on CS1.
This new 64M chip has the DVD rom in the lower half and the boot rom in the upper half of the flash – it required a python script to combine them in the right order.

Soldering the BGA flash to the flex PCB is a bit tricky, as there is no stiffener which would prevent it from warping during reflow - I had to tape all 4 sides to the tray of the reflow oven. If it wasn't so expensive, I would have ordered the first PCBs already with 0.1mm stainless steel stiffener. Tape works too I guess :D

So far, I only installed one in a 90k and it performs 1:1 as the original bios chip. Due to it containing the DVD rom, even DVD movies work now!

More testing is needed to figure out the compatibility to other models. Let’s see what else comes up in the future!
 
Joined
Apr 12, 2017
Messages
222
Likes
149
Location
Canada
You sir, have single handedly advanced PS2 modding by centuries... And the fact that this is what you consider a fun little side project... One begins to wonder just what you would consider a legitimate challenge!

Since you keep saying that your current design is just a prototype, can we assume you'll be using nothing more than the little BGA chip for the Boot ROM in the next version? Either way that little flex you have it mounted on looks completely professional, and very impressive.

Also, do you really ride a train for 2 hours each day? That sounds rough. Has anyone asked about your absolutely one-of-a-kind handheld?
 
Joined
Dec 25, 2022
Messages
48
Likes
446
Location
Landeck, Austria
You sir, have single handedly advanced PS2 modding by centuries... And the fact that this is what you consider a fun little side project... One begins to wonder just what you would consider a legitimate challenge!

Since you keep saying that your current design is just a prototype, can we assume you'll be using nothing more than the little BGA chip for the Boot ROM in the next version? Either way that little flex you have it mounted on looks completely professional, and very impressive.

Also, do you really ride a train for 2 hours each day? That sounds rough. Has anyone asked about your absolutely one-of-a-kind handheld?
Hey, thanks I guess!

I know it’s a bit weird to call it a prototype, as it’s perfectly usable like this. It mainly serves as a daily reminder for myself to correct all the little details that bother me on the hardware side & to finish the software side so it complies with the requirements I defined :D

Regarding the BGA boot rom, that’s just a small side project at this point. Right now, it doesn’t have many use cases (apart from maybe 70k and 90k consoles), but who knows what the future brings! For the final mainboard revision I will probably stick to the TSOP48 flash, having a BGA chip on the underside would make soldering unnecessarily difficult and having the whole boot rom flex would be another addition to the BOM cost. (even exluding the expensive BGA adapter for the TL866)
With this flex PCB the main goal was to test the new circuit around the flash, as I would like to reuse that on the mainboard for future proofing (in case someone finds out how to launch homebrew from the dvd rom). But apart from that, I do have some more boot rom things going on in the background!

The commutes were actually a big motivation for starting this project to begin with. It’s 3h in total per weekday, but two of them can be made useful at least. I tried pretty much everything to have some productive time, but the only thing that kind of worked was some light programming… and even that led to lots of bugs, it’s just hard to focus in the train.
-> Perfect application for a portable! I used to bring the steam deck, but now it mostly got replaced by the PS2. Actually, unlike the steam deck, nobody ever commented on it. In the end my design goal was to make an inconspicuous black box with a screen, which means that goal was successfully achieved already!
 
Joined
Mar 17, 2016
Messages
86
Likes
52
With this flex PCB the main goal was to test the new circuit around the flash, as I would like to reuse that on the mainboard for future proofing (in case someone finds out how to launch homebrew from the dvd rom).
Isn't FreeDVDBoot a thing already? Or do you mean something different?
 
Joined
Dec 25, 2022
Messages
48
Likes
446
Location
Landeck, Austria
Isn't FreeDVDBoot a thing already? Or do you mean something different?
By that I mean replacing the DVD player with homebrew in the DVD rom itself, essentially making full use of the reprogrammable ROM. The DVD player would just be wasting memory space in a portable, so why not use the 4MBytes of flash for something else? Right now it seems to have more limitations than benefits, but as it's already possible to store applications in the boot rom, it might be possible to make use of those 4MBytes one day.
 
Joined
Mar 17, 2016
Messages
86
Likes
52
By that I mean replacing the DVD player with homebrew in the DVD rom itself, essentially making full use of the reprogrammable ROM. The DVD player would just be wasting memory space in a portable, so why not use the 4MBytes of flash for something else? Right now it seems to have more limitations than benefits, but as it's already possible to store applications in the boot rom, it might be possible to make use of those 4MBytes one day.
Ahh, that makes more sense, thanks
 
Joined
Mar 12, 2023
Messages
2
Likes
0
By that I mean replacing the DVD player with homebrew in the DVD rom itself, essentially making full use of the reprogrammable ROM. The DVD player would just be wasting memory space in a portable, so why not use the 4MBytes of flash for something else? Right now it seems to have more limitations than benefits, but as it's already possible to store applications in the boot rom, it might be possible to make use of those 4MBytes one day.
if you’re able to modify the boot rom, does that mean you can add USB 2.0 to the PS2?
 

Y2K

"The PS1 Guy"
Staff member
.
.
Joined
Apr 14, 2022
Messages
191
Likes
425
Location
Chicago, IL
if you’re able to modify the boot rom, does that mean you can add USB 2.0 to the PS2?
Not how that works, unfortunately. The USB 2.0 spec requires an updated hardware PHY that can handle low-speed -> full-speed -> high-speed negotiation, which the USB 1.1 PHY in the PS2 would only be able to set up full-speed at most - this is a hardware limitation, not a software one.
 
Joined
Mar 12, 2023
Messages
2
Likes
0
Not how that works, unfortunately. The USB 2.0 spec requires an updated hardware PHY that can handle low-speed -> full-speed -> high-speed negotiation, which the USB 1.1 PHY in the PS2 would only be able to set up full-speed at most - this is a hardware limitation, not a software one.
You would still need the USB2.0 drivers which are in the rom IIRC.
Edit I am pretty sure I’m wrong here.

Couldn’t you update the microcontroller?
 
Last edited:

Y2K

"The PS1 Guy"
Staff member
.
.
Joined
Apr 14, 2022
Messages
191
Likes
425
Location
Chicago, IL
You would still need the USB2.0 drivers which are in the rom IIRC.

Couldn’t you add the physical hardware and modify the rom to use USB2.0, at least in theory?
No, the USB PHY is baked into the die on the CXD2976GB (combination Emotion Engine & Graphics Synthesizer) and cannot be removed or be replaced by something else.
 
Joined
Apr 6, 2020
Messages
116
Likes
320
You would still need the USB2.0 drivers which are in the rom IIRC.
Edit I am pretty sure I’m wrong here.

Couldn’t you update the microcontroller?
The way the IC was built, the circuits inside it made in silicon cannot be changed, it is a physical part of the chip, there is no code that can be changed, the IC simply cannot be changed.
 
Joined
Dec 25, 2022
Messages
48
Likes
446
Location
Landeck, Austria
Hey, time for a tiny update!
This time there are two topics to discuss:

SD2PSX
Well, I got all the parts & the flex PCBs and assembled one SD card sized SD2PSX. After I cleaned the PCB, I continued by adhering the top & bottom 3D printed parts to the flex PCB using 2K epoxy (also potted all circuitry in epoxy to avoid any solder joint failures down the road, due to mechanical stress). I then soldered a USB cable, I2C display and two buttons to the test points and flashed the latest SD2PSXtd firmware. Sadly, the first setup still required the display (setting it to PS2 mode, enabling autoboot and deploying CIV.bin), but afterwards it works just fine without the OLED screen connected. I actually don’t know why this is required, as there is a config file on the SD card with the right settings (but it seems to be ignored?).

IMG_20250308_180213923.jpg
IMG_20250308_180236730.jpg


I can also confirm that the smaller sized packages for the PSRAM and SPI flash work just fine (no surprise), here are the part numbers for reference: W25Q128JVPIQ (flash) and APS6404L-3SQR-ZR (PSRAM). Without those, it wouldn't be possible to make the circuit this small.

I’ve installed NHDDL on the boot memory card and also transferred over all my save files, from then on it “just worked”. I actually really like NHDDL, it’s really clean & simple and boots straight to the games without touching any settings! So far the gaming experience and compatibility is about equal to the MX4SIO, with the big benefit of being able to store all savegames on it. Another big plus is being able to plug it into my fat PS2 to continue playing on the TV!

What bothers me right now is a potential bug I found in my gamepad emulator. For some reason the gamepad is unresponsive when launching NFS MW from MMCE, it does work just fine when launching it from MX4SIO. I don’t have my debugger here right now, but this one definitely gets onto the list of bugs to fix.

A couple other points I noted about the hardware itself:
  • The card is currently a bit thick; it should be reduced by 0.1 to 0.2mm in the next revision (you can already see wear marks on some contacts due to it)
  • The test point position below the micro SD card is not ideal, the lack of a stiffener there makes that spot of the flex PCB really fragile -> maybe move them to somewhere under the RP2040 in the next revision.
  • The bottom 3D printed piece is necessary to avoid deformation of the micro SD slot when inserting a card. The slot is so thin and small that it relies on the PCB to keep it in shape.
  • An alignment feature on the printed parts would be ideal for reproducible assembly

FPGA & Menu
On the FPGA side I’ve been working on finally displaying the config menu on-screen. For that I had to define the interface between syscon and FPGA a bit better, develop a small FPGA SPI slave module, conceptualize and design a sprite module for the FPGA and adjust the output data path of the video processor to fit the sprite module.

This would be the current SPI interface approach:
  • CPOL = 1 & CPHA = 1 (SPI mode 3)
  • 25MHz clock speed
  • CS active high
  • 8 bits per transfer
  • Each SPI packet consists of at least 1 command byte(read/write) followed by a 2 byte register address and then at least 1 data byte
  • There is no limit on transferred data bytes per packet, the SPI slave will happily receive/transmit data without wait cycles until CS goes low
  • Reading from the FPGA is implemented in the SPI module, but currently not used/untested. I actually can't think of any use-cases right now
Essentially, the syscon treats the video processor as one big memory. Internally, the SPI slave handles the banking and distributes the data to the correct module, depending on the address. Register access is handled internally by each module.
The sprite module is currently the only module accessible by the SPI interface. The accessible part essentially consists of 3 banks: 1 bank for control registers (x/y position of sprites, text color, background color), 1 bank to store the sprites to draw on the screen (up to 512 sprites at the same time) and 1 bank that stores the font (up to 128 individual sprites, the syscon loads it at startup).

Initially I was planning to store the sprites in the framebuffer, which would have no limitation regarding number of sprites on screen, or the size of sprites. But with the 4-field deinterlacer I don’t have much bandwidth left to cover the sprites there. Additionally, it would have been a real pain in the ass to adjust the menu to resolution changes on the input side.
Now the sprite module resides between the scaler and the CDC linebuffer for the video output module, so it needs to store all sprites to display in its own buffer. That’s were the limitation of 512 sprites comes from. There is also a limitation of ~30 to 40 sprites per line currently. The sprite drawing state machine is still quite inefficient right now and I will need to improve it, that should probably boost the amount of sprites that can be displayed per line to about 60-70.

Here is a small demonstration of the current implementation:


The menu itself works quite well and even some of the settings are working already (volume, analog stick calibration, storing settings). You can also see that the main menu displays the state of charge and EE temperature, which is refreshed in 1s intervals. Something similar is done in the power management monitoring menu, you can see that it displays the power consumption, time to full and time to empty currently.
You can also see that the font size is ridiculously tiny… for some reason I was overestimating the size of 8x8 pixel sprites. I think the next step is to implement integer scaling of the sprites, it should not be difficult to do. I will probably implement it as global scaling factor, instead of allowing each sprite to be scaled individually -> much easier and as I’m mostly only displaying text, I don’t see a benefit in having different sized sprites on the same screen.

All in all this is already a huge step forward for the menu! There are so many puzzle pieces that need to work together in order to display even a single sprite…
This now also opens the door for configuring other aspects of the video processor via the syscon!
FPGA LUT utilization is now at about 25% and the whole video processor is using about 50% of the available block RAM, so we're still good in that regard.
 
Joined
Apr 6, 2020
Messages
116
Likes
320
Hey, time for a tiny update!
This time there are two topics to discuss:

SD2PSX
Well, I got all the parts & the flex PCBs and assembled one SD card sized SD2PSX. After I cleaned the PCB, I continued by adhering the top & bottom 3D printed parts to the flex PCB using 2K epoxy (also potted all circuitry in epoxy to avoid any solder joint failures down the road, due to mechanical stress). I then soldered a USB cable, I2C display and two buttons to the test points and flashed the latest SD2PSXtd firmware. Sadly, the first setup still required the display (setting it to PS2 mode, enabling autoboot and deploying CIV.bin), but afterwards it works just fine without the OLED screen connected. I actually don’t know why this is required, as there is a config file on the SD card with the right settings (but it seems to be ignored?).

View attachment 37897View attachment 37898

I can also confirm that the smaller sized packages for the PSRAM and SPI flash work just fine (no surprise), here are the part numbers for reference: W25Q128JVPIQ (flash) and APS6404L-3SQR-ZR (PSRAM). Without those, it wouldn't be possible to make the circuit this small.

I’ve installed NHDDL on the boot memory card and also transferred over all my save files, from then on it “just worked”. I actually really like NHDDL, it’s really clean & simple and boots straight to the games without touching any settings! So far the gaming experience and compatibility is about equal to the MX4SIO, with the big benefit of being able to store all savegames on it. Another big plus is being able to plug it into my fat PS2 to continue playing on the TV!

What bothers me right now is a potential bug I found in my gamepad emulator. For some reason the gamepad is unresponsive when launching NFS MW from MMCE, it does work just fine when launching it from MX4SIO. I don’t have my debugger here right now, but this one definitely gets onto the list of bugs to fix.

A couple other points I noted about the hardware itself:
  • The card is currently a bit thick; it should be reduced by 0.1 to 0.2mm in the next revision (you can already see wear marks on some contacts due to it)
  • The test point position below the micro SD card is not ideal, the lack of a stiffener there makes that spot of the flex PCB really fragile -> maybe move them to somewhere under the RP2040 in the next revision.
  • The bottom 3D printed piece is necessary to avoid deformation of the micro SD slot when inserting a card. The slot is so thin and small that it relies on the PCB to keep it in shape.
  • An alignment feature on the printed parts would be ideal for reproducible assembly

FPGA & Menu
On the FPGA side I’ve been working on finally displaying the config menu on-screen. For that I had to define the interface between syscon and FPGA a bit better, develop a small FPGA SPI slave module, conceptualize and design a sprite module for the FPGA and adjust the output data path of the video processor to fit the sprite module.

This would be the current SPI interface approach:
  • CPOL = 1 & CPHA = 1 (SPI mode 3)
  • 25MHz clock speed
  • CS active high
  • 8 bits per transfer
  • Each SPI packet consists of at least 1 command byte(read/write) followed by a 2 byte register address and then at least 1 data byte
  • There is no limit on transferred data bytes per packet, the SPI slave will happily receive/transmit data without wait cycles until CS goes low
  • Reading from the FPGA is implemented in the SPI module, but currently not used/untested. I actually can't think of any use-cases right now
Essentially, the syscon treats the video processor as one big memory. Internally, the SPI slave handles the banking and distributes the data to the correct module, depending on the address. Register access is handled internally by each module.
The sprite module is currently the only module accessible by the SPI interface. The accessible part essentially consists of 3 banks: 1 bank for control registers (x/y position of sprites, text color, background color), 1 bank to store the sprites to draw on the screen (up to 512 sprites at the same time) and 1 bank that stores the font (up to 128 individual sprites, the syscon loads it at startup).

Initially I was planning to store the sprites in the framebuffer, which would have no limitation regarding number of sprites on screen, or the size of sprites. But with the 4-field deinterlacer I don’t have much bandwidth left to cover the sprites there. Additionally, it would have been a real pain in the ass to adjust the menu to resolution changes on the input side.
Now the sprite module resides between the scaler and the CDC linebuffer for the video output module, so it needs to store all sprites to display in its own buffer. That’s were the limitation of 512 sprites comes from. There is also a limitation of ~30 to 40 sprites per line currently. The sprite drawing state machine is still quite inefficient right now and I will need to improve it, that should probably boost the amount of sprites that can be displayed per line to about 60-70.

Here is a small demonstration of the current implementation:


The menu itself works quite well and even some of the settings are working already (volume, analog stick calibration, storing settings). You can also see that the main menu displays the state of charge and EE temperature, which is refreshed in 1s intervals. Something similar is done in the power management monitoring menu, you can see that it displays the power consumption, time to full and time to empty currently.
You can also see that the font size is ridiculously tiny… for some reason I was overestimating the size of 8x8 pixel sprites. I think the next step is to implement integer scaling of the sprites, it should not be difficult to do. I will probably implement it as global scaling factor, instead of allowing each sprite to be scaled individually -> much easier and as I’m mostly only displaying text, I don’t see a benefit in having different sized sprites on the same screen.

All in all this is already a huge step forward for the menu! There are so many puzzle pieces that need to work together in order to display even a single sprite…
This now also opens the door for configuring other aspects of the video processor via the syscon!
FPGA LUT utilization is now at about 25% and the whole video processor is using about 50% of the available block RAM, so we're still good in that regard.
It's incredible how you're taking this project to another level. And to think that there's still a lot to be done on the PlayStation 2. We continue to share the projects so that others can be inspired and create innovations for the portable console scene. Congratulations, my friend, excellent work.
 
Top