Desmume or MelonDS

Is it possible to run desmume or melonds on the gameshell?

tested desmume retroarch core, 7 fps on mario
i try pandora version of drastic, crash with illegal instruction :confused:
melonds 9 fps with it’s retroarch core (seem pretty old)
git version of native melonds go much faster (i think 20 fps) with sound but need some config

Oh ok. Sounds like I’m probably gonna get a nintendo switch lite if i want ds games too then.

finally found a compatible drastic, https://github.com/Retro-Arena/binaries/blob/master/odroid-xu4/drastic.tar.gz

run full speed with sound on mario

2 Likes

Oh. Thank you. How do I get this installed on there?

like any other programs just uncrunch the archive and transfer files anywhere you want
on a fist try, run it by ssh :

cd *drastic location*
export DISPLAY=:0
./drastic *your ds rom*

for me it was pretty slow at first run, after first run emu will create his config files in his own folder, go tweak it with keys ect, for a first try select button will valid menu & jump in mario

on second step you will need create a config file for the launcher to associate nds roms folder to open with it, or on arch associate nds roms with the dractic executable

as drastic will use mouse to emulate touch screen you may need to flash your keypad with mouse support firmware

I’m pretty new to this so how would I tweak the config files that it creates with keys and how would you create a config file for the launcher to associate nds roms folder to open with it? Thx for the help.

i can’t test but check others current existing action.config files like https://github.com/clockworkpi/Menu/blob/master/20_Retro%20Games/Pcsx%2B/action.config

assuming you extract drastic folder into /home/cpi/apps/emulators/ and got your roms into /home/cpi/games/ds/ a file like that may work :

/home/cpi/apps/Menu/20_Retro Games/drastic/action.config

ROM=/home/cpi/games/ds
ROM_SO=/home/cpi/apps/emulators/drastic/drastic
EXT=nds
LAUNCHER=
TITLE=ds roms
SO_URL=

It looks as though for now, we can’t edit the controls for Drastic.

I’ve tried to use xmodmap to make a custom entry as follows:

! -*- coding: utf-8 -*-
! 2020-03-10

! set Gameshell keys to Pandora Drastic Mapping

! keycode 86 = SPACE 32
! keycode 9 = PANDORA 147
! keycode 45 = A 278
! keycode 44 = B 279
! keycode 30 = X 280
! keycode 31 = Y 281
! keycode 29 = L 303
! keycode 32 = R 305
! keycode 65 = Select 306
! keycode 36 = Start 308

keycode 86 = 0020
keycode 9 = 0093
keycode 45 = 0116
keycode 44 = 0117
keycode 30 = 0118
keycode 31 = 0119
keycode 29 = 012f
keycode 32 = 0131
keycode 65 = 0132
keycode 36 = 0134

and incorporating a “kill switch” using xbindkeys:

# RETURN KEYS TO NORMAL
"xmodmap ~/apps/emulators/drastic/.xmodmap_original && xbindkeys --defaults > ~/.xbindkeysrc && killall xbindkeys && killall drastic"
Escape

Theoretically, it should work however I don’t think I’ve gotten the correct hex values of what the expected output from Drastic is meant to be. From the looks of things, it was written for the Pandora console. I can find a table of the suspected keycodes correlating to each input key, however I need either the keysym or the hex code for each button to work with xmodmap. The mapping I have currently made was one I came up with, searching high and low for whatever I could re: how the Pandora is mapped. In a nutshell, it sounds like no one in the Pandora community can come to any consensus as to what the mappings actually are.

Does anyone possibly own a pandora, and could they possibly run xev and show the printouts for each of the Pandora’s “ABXYLR+START+SELECT+HOME” inputs?

I have also reached out and contacted the author, and asked politely if he could possibly provide the source code to allow us to customise it to the Gameshell’s control scheme.

For now, we may be able to get it working.

this is not pandora version but odroid xu4 one,
have you try run drastic without a rom ?
there is a menu with options & controls, yet it’s too small to see anything on the gameshell screen, need try hdmi display

Ah! I thought it was something that was ported from the Pandora to work on the Odroid XU4. Must have just been a leftover readme file.

I didn’t even consider running it without a rom! Good idea! I’ll probably need to plug in a keyboard too, since the only mappings that seem to be active are the D-Pad, Escape, Space and Enter.

I’ll give that a go right away. Thanks for the tip.

Thanks again @r043v. I never would have thought to run it without a rom loaded.

I’ve put together a config file with settings that work well with the Gameshell. Either edit your existing config, or make a new file called drastic.cfg saved in ~apps/emulators/drastic/config/ or wherever you saved your drastic directory.

frameskip_type = 2
frameskip_value = 4
show_frame_counter = 0
screen_orientation = 2
screen_scaling = 2
screen_swap = 0
savestate_number = 0
fast_forward = 0
enable_sound = 1
clock_speed = 0
threaded_3d = 1
mirror_touch = 0
compress_savestates = 1
savestate_snapshot = 1
unzip_roms = 1
backup_in_savestates = 1
ignore_gamecard_limit = 0
frame_interval = 0
trim_roms = 0
fix_main_2d_screen = 0
disable_edge_marking = 0
hires_3d = 0
use_rtc_custom_time = 0
rtc_custom_time = 0
rtc_system_time = 0
firmware.username = Gameshell
firmware.language = 1
firmware.favorite_color = 0
firmware.birthday_month = 1
firmware.birthday_day = 2
enable_cheats = 1
controls_a[CONTROL_INDEX_UP] = 338
controls_a[CONTROL_INDEX_DOWN] = 337
controls_a[CONTROL_INDEX_LEFT] = 336
controls_a[CONTROL_INDEX_RIGHT] = 335
controls_a[CONTROL_INDEX_A] = 107
controls_a[CONTROL_INDEX_B] = 106
controls_a[CONTROL_INDEX_X] = 105
controls_a[CONTROL_INDEX_Y] = 117
controls_a[CONTROL_INDEX_L] = 121
controls_a[CONTROL_INDEX_R] = 111
controls_a[CONTROL_INDEX_START] = 13
controls_a[CONTROL_INDEX_SELECT] = 32
controls_a[CONTROL_INDEX_HINGE] =
controls_a[CONTROL_INDEX_TOUCH_CURSOR_UP] =
controls_a[CONTROL_INDEX_TOUCH_CURSOR_DOWN] =
controls_a[CONTROL_INDEX_TOUCH_CURSOR_LEFT] =
controls_a[CONTROL_INDEX_TOUCH_CURSOR_RIGHT] =
controls_a[CONTROL_INDEX_TOUCH_CURSOR_PRESS] =
controls_a[CONTROL_INDEX_MENU] = 8
controls_a[CONTROL_INDEX_SAVE_STATE] =
controls_a[CONTROL_INDEX_LOAD_STATE] =
controls_a[CONTROL_INDEX_FAST_FORWARD] = 27
controls_a[CONTROL_INDEX_SWAP_SCREENS] =
controls_a[CONTROL_INDEX_SWAP_ORIENTATION_A] = 108
controls_a[CONTROL_INDEX_SWAP_ORIENTATION_B] = 104
controls_a[CONTROL_INDEX_LOAD_GAME] =
controls_a[CONTROL_INDEX_QUIT] =
controls_a[CONTROL_INDEX_UI_UP] = 338
controls_a[CONTROL_INDEX_UI_DOWN] =337
controls_a[CONTROL_INDEX_UI_LEFT] = 336
controls_a[CONTROL_INDEX_UI_RIGHT] = 335
controls_a[CONTROL_INDEX_UI_SELECT] = 107
controls_a[CONTROL_INDEX_UI_BACK] = 106
controls_a[CONTROL_INDEX_UI_EXIT] = 27
controls_a[CONTROL_INDEX_UI_PAGE_UP] = 111
controls_a[CONTROL_INDEX_UI_PAGE_DOWN] = 121
controls_a[CONTROL_INDEX_UI_SWITCH] = 32
controls_b[CONTROL_INDEX_UP] =
controls_b[CONTROL_INDEX_DOWN] =
controls_b[CONTROL_INDEX_LEFT] =
controls_b[CONTROL_INDEX_RIGHT] =
controls_b[CONTROL_INDEX_A] =
controls_b[CONTROL_INDEX_B] =
controls_b[CONTROL_INDEX_X] =
controls_b[CONTROL_INDEX_Y] =
controls_b[CONTROL_INDEX_L] =
controls_b[CONTROL_INDEX_R] =
controls_b[CONTROL_INDEX_START] =
controls_b[CONTROL_INDEX_SELECT] =
controls_b[CONTROL_INDEX_HINGE] =
controls_b[CONTROL_INDEX_TOUCH_CURSOR_UP] =
controls_b[CONTROL_INDEX_TOUCH_CURSOR_DOWN] =
controls_b[CONTROL_INDEX_TOUCH_CURSOR_LEFT] =
controls_b[CONTROL_INDEX_TOUCH_CURSOR_RIGHT] =
controls_b[CONTROL_INDEX_TOUCH_CURSOR_PRESS] =
controls_b[CONTROL_INDEX_MENU] =
controls_b[CONTROL_INDEX_SAVE_STATE] =
controls_b[CONTROL_INDEX_LOAD_STATE] =
controls_b[CONTROL_INDEX_FAST_FORWARD] =
controls_b[CONTROL_INDEX_SWAP_SCREENS] =
controls_b[CONTROL_INDEX_SWAP_ORIENTATION_A] =
controls_b[CONTROL_INDEX_SWAP_ORIENTATION_B] =
controls_b[CONTROL_INDEX_LOAD_GAME] =
controls_b[CONTROL_INDEX_QUIT] =
controls_b[CONTROL_INDEX_UI_UP] =
controls_b[CONTROL_INDEX_UI_DOWN] =
controls_b[CONTROL_INDEX_UI_LEFT] =
controls_b[CONTROL_INDEX_UI_RIGHT] =
controls_b[CONTROL_INDEX_UI_SELECT] =
controls_b[CONTROL_INDEX_UI_BACK] =
controls_b[CONTROL_INDEX_UI_EXIT] =
controls_b[CONTROL_INDEX_UI_PAGE_UP] =
controls_b[CONTROL_INDEX_UI_PAGE_DOWN] =
controls_b[CONTROL_INDEX_UI_SWITCH] =

In game:
DS Controls = Same mapping as gameshell, except for hinge control. It doesn’t seem to want to wake up from the closed state.
Quit = Menu (hard coded seemingly - can’t change this)
Access the menu = Shift + Menu
Switch screen = R2 (Shift + A)
Change from full screen/dual screen = L2 (Shift + B)
(It starts in full single screen mode)

Menu navigation: (extremely hard to read)
Select = A
Back = B
Page up = R1 (Shift + X)
Page down = L1 (Shift + Y)

Strangely, while using it plugged in via HDMI, it wouldn’t load; saying it can’t find the correct bios files etc. I’ll look into it later, but for now it isn’t too much of a problem.

So far I’ve tried for about 5 mins each:
New Super Mario Bros. - Works Perfectly

Casltavania Dawn of Sorrow - Works Perfectly (you’ll need the mouse mod in the arduino to sign your name)
Castlevania Portrait of Ruin - Works Perfectly! (you’ll need the mouse mod to draw your emblem)
Castlevania Order of Ecclesia - Works Perfectly (you might need the touchpad use for magnesis… it’s been a while!)

Super Mario 64 - Works Perfectly (you’ll want the light bar key attachment)
Mariokart DS - Works Perfectly (you’ll want to use the light bar key attachment)
Mario and Luigi Partners in Time - Works Perfectly!

Legend of Zelda Phantom Hourglass - Works Perfectly (you’ll need the mouse mode in the arduino to … well play the game - I strongly recommend the D-Pad patch)
Legend of Zelda Spirit Tracks - Works Perfectly (Same as above - get the patch here

Phoenix Wright Ace Attorney - Works Perfectly
Children of Mana - Works Perfectly!

I was honestly expecting to bump into more hurdles, but this seemingly runs practically perfect for every game I’ve tried. I was going to report back on more games, but I think I know what the results are going to be.

2 Likes

great work ! :slight_smile:

yes it run pretty great, exophase made an awesome emulator, it’s also the gpsp creator :sunflower:

i was also get trouble while run it with hdmi, no bios issue but black screen & hang just after the launch, it’s do the same while launch it by ssh using X11 forwarding, maybe a gpu limitation while we use high resolution, we may try using a bit xrandr before the launch

1 Like

So, I have followed this to the best of my ability. I even went so far as to copy the directories from the Custom DEOT image, but I cannot get this to run on the stock OS v0.5.

What am I doing wrong here, @javelinface? The emulator goes to the loading screen, fades to black, and then returns to the home screen. Are there some hidden things I am missing?

try launch it directly by ssh to see emulator output

cd *drastic location*
export DISPLAY=:0
./drastic *your ds rom*

Would it be possible to give me a more specific example of what that would look like? Is the following write out accurate?

cd /home/cpi/apps/emulators/drastic
export DISPLAY=:0
./drastic Super Mario 64 DS.nds

you may escape the rom filename spaces and give it real path, but yes

Thanks, @r043v that did the trick. The only other problem I’m encountering is (obviously) the lack of touchscreen. I noticed in the control mapping @javelinface mapped out that there is an option for [CONTROL_INDEX_TOUCH_CURSOR_PRESS]. Is there a list of mapping numbers somewhere I could use to program the middle light bar button (or really any other available button) as a general “touch the screen” button?

Update: Nevermind, I managed to remap one of the buttons, but there was an obvious issue with the lack of control regarding where you click. I guess I will have to look further into the mouse mod, but I am admittedly intimidated at the idea of modifying the firmware.

I am admittedly intimidated at the idea of modifying the firmware

don’t be, it’s very useful and has not any real risk to do

You’re right! It wasn’t too bad once I sat down to do it. Thanks for your help, @r043v!