markus-zzz / myc64-pocket

A Commodore 64 core for the Analogue Pocket
33 stars 2 forks source link

FEATURE REQUEST: Support for .crt file format #17

Closed ifighftdragons closed 1 month ago

ifighftdragons commented 4 months ago

FEATURE REQUEST: Support for .crt file format

markus-zzz commented 4 months ago

This is the next big thing to take on once I finish bug patrol.

Any title in particular you are aiming at?

The crt spec defines 28 different variants. Which is most important to support?

ifighftdragons commented 4 months ago

This is the next big thing to take on once I finish bug patrol.

Any title in particular you are aiming at?

The crt spec defines 28 different variants. Which is most important to support?

Great to hear!

A Pig Quest, which is often regarded as one of the better homebrew games on the C64. I can only find it in .crt format. Not sure which variant it is.

The filenames are as follows, if it helps: A Pig Quest +2 {EasyFlash} [EX] A Pig Quest v1.02 +9_[trex]

markus-zzz commented 4 months ago

A Pig Quest, which is often regarded as one of the better homebrew games on the C64. I can only find it in .crt format. Not sure which variant it is.

That is one impressive C64 game! I bought a copy to support the developers and had a look. The delivered.crt file is 1MB in size and probably packed with assets for the game which explains why it is not available in any other format.

So I guess, even though I am skeptical to the .crt format as a whole, that there is reason to support it. At least this particular one cartridge format.

The .crt identifies as hardware type 32 (EasyFlash) that unfortunately is not covered by the CRT file format spec. There is a programmers reference for the EasyFlash cartridge though where the 'Hardware description' section does seem to cover the necessary details (at least combined with the previous document and some reasonable assumptions).

For the pocket I think the external pseudo-SRAM would be a good fit for the 1MB cartridge data. Initially just testing in simulation with a big SRAM to see if the cartridge boots up seems like a good start. There could very well be other issues in the way that prevents it from working and it is better to find that out before spending time on an external memory controller.

ifighftdragons commented 4 months ago

Thanks for the detailed reply, Markus. That's awesome to hear you want to try to include support for the game. I also bought a copy to support the devs. Blown away by how impressive it is for a C64 game.

markus-zzz commented 4 months ago

Somewhat experimental support for the Magic Desk .crt format on branch dev/crt with attached test build MyC64-Pocket.zip

tested and worked well with the following

-rwxr-xr-x 1 root root 82144 maj 26 17:34 'Bubble Bobble.crt'
-rwxr-xr-x 1 root root 82144 maj 26 17:33  Cybernoid.crt
-rwxr-xr-x 1 root root 82144 maj 26 17:32  Nebulus.crt
-rwxr-xr-x 1 root root 82144 maj 26 17:33 'Ruff and Reddy.crt'
-rwxr-xr-x 1 root root 65728 maj 26 17:33 'Runn '\''n'\'' Gunn (Carleton Handley - 2021).crt'

The Magic Desk format is the most prevalent format in the OneLoad64 collection. The other format is EasyFlash for larger titles with its 1MB storage. That format is next up but it will require external memory support (likely the PSRAM of the pocket).

markus-zzz commented 4 months ago

Core Settings -> Load & Start CRT don't show any .crt files?

ifighftdragons commented 4 months ago

Core Settings -> Load & Start CRT don't show any .crt files?

My bad, it absolutely works. Just had to get all the system files in order.

Tested the games you listed, they all run. Really sweet update!

markus-zzz commented 3 months ago

EasyFlash comming along - A Pig Quest loaded up in simulation

$ ./core_top-sim --dump-video --crt ~/Downloads/pig/apigquest/apigquest_ef.crt
$ ffmpeg -r 50 -pattern_type glob -i 'vicii-*.png' -c:v libx264 -pix_fmt yuv420p  pigsquest.mp4

https://github.com/markus-zzz/myc64-pocket/assets/8939552/11954ea0-c0e6-41f1-88d6-74dc6ddfd36b

using commit 56472e334597b78957ff6e6bbbecbc8a9debe359 (origin/dev/crt)

ifighftdragons commented 3 months ago

EasyFlash comming along - A Pig Quest loaded up in simulation

$ ./core_top-sim --dump-video --crt ~/Downloads/pig/apigquest/apigquest_ef.crt
$ ffmpeg -r 50 -pattern_type glob -i 'vicii-*.png' -c:v libx264 -pix_fmt yuv420p  pigsquest.mp4

pigsquest.mp4 using commit 56472e3 (origin/dev/crt)

Wow, that's exciting! Great work :D

markus-zzz commented 2 months ago

With v0.2.5

https://youtu.be/xFoOOlylnOM?si=7o6JGVqHLCQdMP8S

but (as I say in the video description) there are some issues with the controls.

I think I'll leave this open until those get fixed

dukestah commented 2 months ago

just some feedback, with v0.2.5 many crt images I was able to test are working now and the release brought many improvements to the emulation as well. best thing, Buggy Boy works now :) still got the issue that I can't switch between the 'Select' button menu pages while the Pocket is in the Dock and when using the CRT display option in combination with the Integer+ scaling, the 'Select' menu is slightly out of the visible screen area. nice progress, keep up the good work, I highly appreciate it :)

markus-zzz commented 2 months ago

just some feedback, with v0.2.5 many crt images I was able to test are working now and the release brought many improvements to the emulation as well. best thing, Buggy Boy works now :) still got the issue that I can't switch between the 'Select' button menu pages while the Pocket is in the Dock and when using the CRT display option in combination with the Integer+ scaling, the 'Select' menu is slightly out of the visible screen area. nice progress, keep up the good work, I highly appreciate it :)

Thanks. I appreciate the feedback - it is really hard for me to know anything about what the users are up to otherwise (or even if there are any users at all).

I see what you mean with the 'Integer +' mode and the OSD and there actually already exist an issue for it #6 (so lets continue discussing that there).

markus-zzz commented 2 months ago

With test build in #26 A Pig Quest is now playable. Turned out that the game used a 2nd fire button mapped to jumping and I had not implemented the paddle support (that it makes use of) at all. So that is why it thought the 2nd fire (i.e. jump) was constantly pressed.

markus-zzz commented 1 month ago

Resolved as of release v0.2.6