christianhaitian / arkos

Another rockchip Operating System
MIT License
1.48k stars 83 forks source link

Feature Request - Add TRS-80 Coco to ArkOS emulators #895

Closed EnsignRutherford closed 7 months ago

EnsignRutherford commented 8 months ago

Hi,

I've been trying to add support following the examples of how other emulators are currently setup, but to no avail.

I've tried all mame and mess cores to try and load a game disk in a zip file. I have the roms required in the bios folder, but retroarch starts and stops with no error message.

Can you assist?

ER

christianhaitian commented 8 months ago

How is it supposed to work?

EnsignRutherford commented 8 months ago

Not sure... I'm researching how it works on other platforms.

EnsignRutherford commented 8 months ago

So I've made some progress... Placed two xml files from MESS into the hash folder of mame, and put the bios files in the proper folder. This command is used to execute: /usr/local/bin/retroarch -v -L /home/ark/.config/retroarch/cores/mess_libretro.so /roms2/coco/nebula.zip

This loads up everything ok and identifies the proper emulation "coco" but fails to find the rom file. [INFO] RetroArch 1.16.0 (Git 14cb3732eb) [INFO] Saving files in content directory is set. This overrides other save file directory settings. [INFO] Saving save states in content directory is set. This overrides other save state file directory settings. [INFO] === Build ======================================= [INFO] Capabilities: ASIMD [INFO] Version: 1.16.0 [INFO] Git: 14cb3732eb [INFO] Built: Oct 3 2023 [INFO] ================================================= [INFO] [Input]: Found input driver: "udev". [INFO] [Core]: Loading dynamic libretro core from: "/home/ark/.config/retroarch/cores/mess_libretro.so"

[INFO] Saving files in content directory is set. This overrides other save file directory settings. [INFO] Saving save states in content directory is set. This overrides other save state file directory settings. [INFO] [Overrides]: Redirecting save file to "/roms2/coco/nebula.srm". [INFO] [Overrides]: Redirecting save state to "/roms2/coco/nebula.state".

[INFO] [Environ]: SYSTEM_DIRECTORY: "/roms2/bios". [libretro INFO] SYSTEM_DIRECTORY: /roms2/bios [INFO] [Environ]: CORE_ASSETS_DIRECTORY: "/home/ark/.config/retroarch/downloads". [libretro INFO] CONTENT_DIRECTORY: /home/ark/.config/retroarch/downloads

[libretro INFO] SAVE_DIRECTORY: /roms2/coco/ [INFO] [Environ]: SET_PIXEL_FORMAT: XRGB8888. [INFO] [Content]: Content loading skipped. Implementation will load it on its own. [ERROR] [Environ]: GET_VARIABLE: mame_nobuffer - Invalid value. [libretro INFO] Joystick map: disabled

[libretro INFO] Starting game from command line:/roms2/coco/nebula.zip [libretro INFO] ARGUV[0]=/roms2/coco/nebula.zip [libretro WARN] Driver nebula not found -1 [libretro WARN] Game not found: nebula [libretro INFO] Game name: coco, Game description: Color Computer [libretro INFO] Game name: coco, Game description: Color Computer [libretro INFO] System found: coco Adding monitor screen0 (640 x 480) a:1.333333 [libretro INFO] SOURCE FILE: ../../../../../src/mame/trs/coco12.cpp [libretro INFO] PARENT: 0 [libretro INFO] NAME: coco [libretro INFO] DESCRIPTION: Color Computer [libretro INFO] YEAR: 1980 [libretro INFO] MANUFACTURER: Tandy Radio Shack [libretro ERROR] bas10.rom NOT FOUND (tried in coco) [libretro ERROR] Fatal error: Required files are missing, the machine cannot be run. [libretro INFO] RES:2

bas10.rom is in /roms2/coco, /roms2/bios, and roms2/bios/coco but still doesn't find it.

Still investigating. I'm close.

EnsignRutherford commented 8 months ago

Got it... moved bas10.rom to coco.zip in /roms2/coco and it works!

christianhaitian commented 8 months ago

Sweet. I'll check this out when possible.

EnsignRutherford commented 8 months ago

1000030383

EnsignRutherford commented 8 months ago

Okay much like Dungeons of Daggorath, abandon hope all ye that enter the dungeon... or something like that. I've tried several cartridges to test and the high resolution screens are mangled. It's not playable unless I'm doing something incredibly wrong. No errors are being generated.

EnsignRutherford commented 8 months ago

Ok, got it working after doing something silly. Changed the name of the rom folder from 'coco' to 'coco3' and all the cartridges I've tested work and I was even able to play Canyon Climber to complete the first level! I'll update this post with the configuration details shortly.

christianhaitian commented 8 months ago

Fantastic!

EnsignRutherford commented 8 months ago

Roms Folder: /roms/coco3 or /roms2/coco3 BIOS location: coco3.zip in Roms folder specified above Hash files: /roms/bios/mame/hash or /roms2/bios/mame/hash Hash files: coco_carts.xml and coco_flop.xml es_systems.cfg system entry: `

coco3
  <fullname>Color Computer 3</fullname>
  <path>/roms2/coco3/</path>
  <extension>.zip .ZIP .bin .BIN .7z .7Z</extension>
  <command>sudo perfmax %GOVERNOR%; nice -n -19 /usr/local/bin/retroarch -L /home/ark/.config/retroarch/cores/mess_libretro.so %ROM%; sudo perfnorm</command>
  <platform>coco3</platform>
  <theme>coco3</theme>

` This should get you to the point where you can test. I'm still working out how to assign a keyboard emulation in RetroArch. Some games don't need any changes, e.g. Canyon Climber, Downland but Project Nebula requires you to press a keystroke 1,2,3 or 4 to start the game. I think they require game specific controls because there was no standard on the original Coco. Games would use left joystick, right joystick, keyboard arrow keys, etc. It was my first computer I started programming on.

christianhaitian commented 8 months ago

Man the nostalgia is strong here. The Tandy CoCo3 was my first computer before I got my first IBM Compatible PC. First computer game I got for it was Rampage. I'll be testing this soon. I'm hoping if it's stable enough to include this with the next update I release either later this week or next.

EnsignRutherford commented 8 months ago

I wrote a bunch of utilities sold by Spectrum Projects back in the day... 40k Basic, Print Spooler, Multipak-Crack, etc. In 2000 I wrote Return of Coco, a coco 1/2 emulator so I could play Dungeons of Daggorath in Windows. Nostalgia indeed!!

By the way any help leading me to map a keyboard to buttons would be helpful... been researching that for a bit now and nothing I do seems to work.

christianhaitian commented 8 months ago

You're using mess so unless mess has the keyboard feature built-in, it might be a situation where a keyboard would need to be plugged to get that functionality. Once I get to a point I can test this, I'll report what I find.

EnsignRutherford commented 8 months ago

If you were into the Coco back then you must remember the work that Steve Bjork did, MegaBug, Sands of Egypt, just to name a couple of awesome titles. I found out recently he passed, news from the Glendale Color Computer Club,

christianhaitian commented 8 months ago

I remember the name but I never played those titles. Hopefully this will be a chance to play them.

EnsignRutherford commented 8 months ago

While I'm doing this I tried the Jedi Academy and Outcast ports. A fix needs to be applied to the screen size. Check out this reddit post for the specifics: https://www.reddit.com/r/RG353V/comments/yttkxg/port_master_jedi_academy_resolution_fix/

christianhaitian commented 8 months ago

I no longer handle port master ports. There's a separate team that handles those.

EnsignRutherford commented 8 months ago

Okee... I'll send this to them. Easy peasy fix.

EnsignRutherford commented 8 months ago

Oops... coco_carts.xml: https://github.com/mamedev/mame/blob/master/hash/coco_cart.xml and coco_flop.xml: https://github.com/mamedev/mame/blob/master/hash/coco_flop.xml

EnsignRutherford commented 8 months ago

I just remembered that for my arcade build to play some ports without a keyboard I used either qjoypad for joy2key. I will look into that.

christianhaitian commented 8 months ago

We can use gptokeyb https://github.com/christianhaitian/gptokeyb

EnsignRutherford commented 8 months ago

I had a dog and his name was BINGO!

EnsignRutherford commented 8 months ago

Leveraging love.sh as an example I now have it setup where a unique gptokeyb file is created for each game if not already defined and a default gptk is copied from /opt/coco3. Testing out things now.

christianhaitian commented 8 months ago

Cool. You can also use mvem.sh as an example as well.

christianhaitian commented 8 months ago

Ok, I finally got a chance to try this out and as usual, there's some hurdles that have to be cleared to play these systems when dealing with MESS/Mame. For Canyon Climber, I had to make sure to have the coco3.zip bios file in the coco3 folder and it had to contain the coco3.rom and disk11.rom files. I had to make sure the zip file was named cclimber.zip and within that file, it had to have Canyon Climber (1982) (26-3089) (DataSoft) [a1].rom in it. I could only control the game with the joystick and action buttons but that might just be needing to redo the controller configuration.

Either way, it's definitely a process to run these games. Thank goodness for the retrobat documentation here related to what needed to be in the respective bios zip files.

christianhaitian commented 8 months ago

So cool to play Rampage on the CoCo 3 via emulation on this. Thanks again for this suggestion and the research on getting this running. For keyboard input, gptokeyb allowing custom keyboard entry will have to do.

christianhaitian commented 8 months ago

Ok, looks like you can just run the .ccc files directly as long as their named as the short name shown in the xml file. For instance, Canyon Climber (1982) (26-3089) (DataSoft) [a1].ccc needs to be renamed to cclimber.ccc and then it loads fine.

christianhaitian commented 8 months ago

Good News, there's a workaround for the keyboard bind need for some games. See here. Just load this remap file and you can assign a keyboard key to any button. For instance, I assigned the start key the letter Y and I could start Rampage just fine. Better than setting up a keydaemon for this.

coco3.zip

EnsignRutherford commented 8 months ago

Let me check it out and I will update my configuration accordingly!

Can you send me an example of the remap file that you used for Rampage. It's not obvious from the one you posted.

christianhaitian commented 8 months ago

The one I attached in the message above your last post is what I used. It has not keys assigned but the device will show as unknown and you can assign any keyboard key to it from the assignment menu for each key.

christianhaitian commented 8 months ago

Also, the controls for trs-80 via MESS are a little annoying. In Canyon Climber, the character starts by walking to the right and when you turn his direction, he keeps walking that direction unless you tap the joystick slightly the opposite direction. Same for Rampage. It's probably related to how the emulator tries to emulate the old trs-80 joystick that didn't self center.

EnsignRutherford commented 8 months ago

I noticed the same behavior. On the third level of Canyon Climber the player walks off the edge if you are not fast enough to stop. Interestingy some games generate segmentation faults, e.g. robocop, upon starting. Not sure why,

EnsignRutherford commented 8 months ago

The one I attached in the message above your last post is what I used. It has not keys assigned but the device will show as unknown and you can assign any keyboard key to it from the assignment menu for each key.

Ok so I'm trying to figure out how I create a rom-specific remap file. I now have a coco3.sh script that executes the rom. It creates a custom retroarch.cfg which points the saves into a saves subfolder under coco3.

UPDATE: I have gptokeyb working so far. Just played Project Nebula. So much nostalgia. I'm not sure how to use the file you sent me... retroarch docs are all over the place.

christianhaitian commented 8 months ago

Just place the remap file contained in the zip in the coco3 folder for instance, then load the remap while in game.

EnsignRutherford commented 8 months ago

Ok I figured out where the filles are stored per content. So my coco3.sh will copy a default coco3.rmp to that location in "/home/ark/.config/retroarch/config/remaps/MAME" for each one if it doesn't already exist. I was trying to move it to under the coco3 folder to have it autoload by setting input_mapping_path in the appended retroarch_coco3.cfg but that wasn't working. Now have to figure out how to support mouse AND keyboard. Almost there.

christianhaitian commented 8 months ago

gptokeyb can do mouse emulation. Not sure how it will work with retroarch though.

EnsignRutherford commented 8 months ago

Ok. Got the retroarch.cfg working now where it goes to a custom folder for the configs. :)

EnsignRutherford commented 8 months ago

Ok... :) I have 76 cartridges that are able to run, each having it's own remap file so it can be configured to work with keyboard characters! Predator and Robocop don't run because they are larger than 16K cartridges and the earlier versions of mess don't support that size so they segmentation fault. Oh well.

Is there a way to compile xroar for the RockChip? I had to make a custom rom/game set that natches the coco_carts.xml in order for them to run.

christianhaitian commented 8 months ago

What is xroar? Can you link the source?

EnsignRutherford commented 8 months ago

https://www.6809.org.uk/xroar/. It's standalone but supports a lot more than MESS or MAME do, at least the versions that are in ArkOS.

christianhaitian commented 8 months ago

I was able to successfully build and run xroar. It seems like it's easier to run game carts that are 8Kb in size or less. I can't seem to get bigger carts to run though like Rampage, Robocop, or Castle of Tharoggad. Attached is the binary and launch script xroar.sh in /usr/local/bin. You can restore this backup that will install everything needed except for the coco3.rom and disk11.rom files needed for coco3 emulation. The script is set to look for bios from the /roms/bios or /roms2/bios folder depending on where you launch your carts from.

  1. Take the attached compressed file (arkosbackup.tar.gz) and put it in your roms/backup folder. Do not uncompress the contents! Just place the file as is in your roms/backup folder. If you don't have a backup folder in the roms folder, just create it.

  2. Then go into the Emulationstation Menu, scroll to Options, hit A, then go to Advanced, hit A, then scroll all the way down to Restore Settings, hit A.

  3. Once completed, you should be able to launch your coco3 games by doing xroar.sh _<path to rom>_ from a terminal session.

Make sure the emulationstation has been shutdown before you attempt this so you can see how it works. Hopefully you can help figure out how to run games larger than 8k.

arkosbackup.tar.gz <--Updated to version 1.5

EnsignRutherford commented 8 months ago

I'll start looking at this today. Rainy day.

I installed the XRoar Windows version 1.4.2 and Rampage, Predator, Robocop and Castle run on that platform.

And I'm able to now run them on the RG353V! Well, almost. More to follow.

christianhaitian commented 8 months ago

I couldn’t get them to run in my windows install of xroar. Perhaps it’s the bios or game files I used? I was attempting to use the .ccc cartridges of those games. What all bios files did you install?

EnsignRutherford commented 8 months ago

I couldn’t get them to run in my windows install of xroar. Perhaps it’s the bios or game files I used? I was attempting to use the .ccc cartridges of those games. What all bios files did you install?

Predator I can play on Windows and the RG353V. Robocop gets to the splash screen on both then hangs. Castle does not run. :(

christianhaitian commented 8 months ago

I never tried Predator. Robocop and castle i got the same results. Rsmpage doesn’t run either.

christianhaitian commented 8 months ago

I wonder of an older version will run them? Maybe a regression in the new version.

christianhaitian commented 8 months ago

So far, xroar seems to run 8k cartridges and lower fine. It's much easier to deal with this emulator vs MESS. Maybe future versions will add the ability to run larger titles.

christianhaitian commented 8 months ago

Even at the color computer archive, xroar there can't play larger roms either so it must be a limitation of the emulator. I've emailed the developer to see if this is known and if there's any plans to eventually review the issue.

christianhaitian commented 8 months ago

Until, then I'm thinking of including this emulator and making it the primary choice with MESS as another option since it can load more coco3 games but control is just wonky with that.

EnsignRutherford commented 8 months ago

I was going to setup es_systems.cfg to support both.