Atari 5200: New version of Atari800 (Beta): two triggers (Moon Patrol!!!), hat start and exit buttons
-
@Used2BeRX i think i found the cause for the cross-contamination......
I have taken the button input and mapped it to the atari keyboard input assuming the keypad would be the same for all users (like i said i was no 5200 kid).
To solve this i will have to remap the joystick buttons to the emulated pokey chip.
But first i have to find out if, and how i have to interact with the emulated gtia chip for two joystick support.Kat5200 seems to be getting more and more attractive as an emulator for the 5200.
Once you have it installed, configured it with mouse and created different configs for different roms it just works.Current downside is there is no button combination support (i.e. for exiting the emulator), the author has plans to incorporate this function though after the upcoming release.
There are no plans for a libretro port however, but anyone is welcome to create one.
Plus side is joystick works as intended and it's highly configurable. -
@future.child I wasn't even aware there was another 5200 emulator for the Pi lol...
I really hope you figure this controller thing out though. If you manage to do that, with the configs I've made and all the work you've done we have the entire 5200 library working "perfectly" except for 3 games. (I'm adding Pole Position to the list because although it plays very good it still would benefit from a True Analog fix).
I'll have to get you the config files somehow. Unfortunately, on the first launch of each game, you would have to follow the spreadsheet and pick the correct configuration for each game that doesn't use the default atari5200.cfg. That's because the file that saves this information changes if you have your roms in different folders than I have mine in, and I can guarantee that you don't have them in the same folders as I do :)
I'll put them together in an upload for you to try out.
-
@Used2BeRX
Atari800 requires an extensive rewrite to descently support analog controls, for which i do not have the needed time.
Perhaps when i find enough time Atari800 will eventually have analog controls.I have created a install script for the kat5200 emulator which has the necessary analog support already present.
You will find more details in this thread. -
@future.child Already saw it and replied about 3 seconds before you posted here. :)
Awesome work man. I should be able to test it out some time this week.
-
@future-child
Thanks for your fixes and additions :DAfter messing around trying to figure out why Robotron 2084/Space Dungeon dual stick controls weren't working for me (shooting was always aiming northwest, and the config would always write out SDL_JOY_0_SECOND_AXIS_ENABLED=0) with a single gamepad connected to my Pi, I finally worked out that the simplest fix was to change the 2 lines in
sdl/input.c
that contain "SDL_JOY_0_SECOND_AXIS_ENABLED" to something else.I'm guessing that since the option SDL_JOY_0_SECOND_AXIS is a substring of SDL_JOY_0_SECOND_AXIS_ENABLED, that's the reason the segment where SDL_JOY_0_SECOND_AXIS_ENABLED option is read from the config file never actually got called.
-
@jlsoft
could you post your config, there may be an issue in there causing it not to work for you with the original code.It is possible because SDL_JOY_0_SECOND_AXIS is a sub string of SDL_JOY_0_SECOND_AXIS_ENABLED this variable should be placed first, but since the complete string is compared, there should be no problem having it in any other order.
-
@future-child
The problem/behavior I was getting was that I would set SDL_JOY_0_SECOND_AXIS_ENABLED=1 in the config, run the emulator, it'd have no effect, and then when the emulator wrote the config back out, it'd replace it with SDL_JOY_0_SECOND_AXIS_ENABLED=0.I don't think anything else in my config would affect that, since it works fine after I only changed the name of that option and made a new build.
SDL_JOY_0_ENABLED=1 SDL_JOY_0_LEFT=7 SDL_JOY_0_RIGHT=5 SDL_JOY_0_UP=4 SDL_JOY_0_DOWN=6 SDL_JOY_0_TRIGGER=16 SDL_JOY_1_ENABLED=0 SDL_JOY_1_LEFT=97 SDL_JOY_1_RIGHT=100 SDL_JOY_1_UP=119 SDL_JOY_1_DOWN=115 SDL_JOY_1_TRIGGER=16 SDL_JOY_0_SELECT=0 SDL_JOY_0_START=3 SDL_JOY_0_TRIGGER1=13 SDL_JOY_0_TRIGGER2=14 SDL_JOY_0_ASTERISK=12 SDL_JOY_0_OPTION=11 SDL_JOY_0_HASH=15 SDL_JOY_0_SECOND_AXIS_ENABLED=1 <= Current build resets this to 0 on exit. SDL_JOY_0_SECOND_AXIS_INDEX=2 SDL_JOY_0_DIGIT_1=16 SDL_JOY_0_DIGIT_2=16 SDL_JOY_0_DIGIT_3=16 SDL_JOY_0_DIGIT_4=16 SDL_JOY_0_DIGIT_5=16 SDL_JOY_0_DIGIT_6=16 SDL_JOY_0_DIGIT_7=16 SDL_JOY_0_DIGIT_8=16 SDL_JOY_0_DIGIT_9=16 SDL_JOY_0_DIGIT_0=16 SDL_JOY_0_A52_PAUSE=1 SDL_JOY_0_A52_RESET=2 SDL_JOY_0_INDEX=0 SDL_JOY_1_INDEX=1 JOY_SPEED_ADJUST=10 JOY_SPEED_ADJUST=10 <=This line is written twice by sdl/input.c :P TRUE_ANALOG_JOYSTICK=0
These are Dualshock 3 button numbers. Single controller connected.
-
@jlsoft so you changed:
strcmp(option, "SDL_JOY_0_SECOND_AXIS"
intostrcmp(option, "SDL_JOY_0_SECOND_AXIS_INDEX"
and
fp, "SDL_JOY_0_SECOND_AXIS=%d\n"...
intofp, "SDL_JOY_0_SECOND_AXIS_INDEX=%d\n"...
?I will update the source and binary, later today, and also fix the
JOY_SPEED_ADJUST
being written twice. -
@future-child
HEH.Ugh...
(I was about to reply to explain how during my fix attempts, adding _INDEX or adding other stuff onto the end didn't have any effect, and only until I actually changed part of the 'SDL_JOY_0_SECOND_AXIS' part would it work...)*Okay, so I decided to start from scratch to make sure it was acting the way I was describing...went and changed the source to test, and realized I needed to also change the
atari5200.py
that auto-maps the RetroArch controls to the atari800.cfg...then noticed line 96:elif line.startswith("SDL_JOY_0_SECOND_AXIS"):
'startswith'...so SDL_JOY_0_SECOND_AXIS_ENABLED was also getting set to 2 right before the executable ran...and it's looking for 1 or T(rue).
It is really sad how long I spent messing with this last night and looking at the wrong thing :D
So yeah, it's only your copy of the
atari5200.py
script that needs altered, since currently it'll matchSDL_JOY_0_SECOND_AXIS_ENABLED=
and make it's value the same asSDL_JOY_0_SECOND_AXIS=
. -
@jlsoft Ok, now it makes sense to me.
As i do not use the python script myself, i did not notice anything wrong.
I specify a config file in the emulators.cfg file so i can have different configurations per system/rom where this python script afaik only uses/home/pi/.atari800.cfg
.I will make changes to the python script and fix the
JOY_SPEED_ADJUST
being written twice.I think changing
elif line.startswith("SDL_JOY_0_SECOND_AXIS")
at line 96 to
elif line.startswith("SDL_JOY_0_SECOND_AXIS=")
(notice the = sign) should be enough to fix it. -
@future-child Hey bud.
I still haven't had a chance to check out that new emulator on the two or three games that weren't working right with the other one.
I was wondering though if you'd had an opportunity to look into the other issue with this emulator with the two bugs? I believe at some point you had said you belived that it was due to a difference between the Atari 5200 controller and the Atari 800 keypad, but then you didn't mention anything about it afterward.
I'd like to spend some time getting back to this and wrapping everything up so I could give you the alternate configs for every game that makes the control functions as uniform as possible between all of the games.
-
@Used2BeRX
I did spend some time getting the inputs right but so far without success.
To get it right the sdl input should have to be rewritten to use a event driven model instead of a polling model.
The polling it now uses has timing issues causing the misfiring experienced in roms like choplifter.The input crosstalk is another thing requiring a lot of work.
The original 5200 used multiplexers to select which joystick port places keypad (row/column) data on the bus, as far as i can tell the core does not have this implemented so all incoming data appears to come from all joystickports. -
Hey @future-child , a quick question related to the 800/XL/XE computers rather than the 5200, if I may... in several games, such as Archon or Bruce Lee, hitting the joy0 button 0 seems to pause the game as well as firing. I found reference online to hitting F7 to toggle "keyboard mode" but that didn't seem to work. I have both keyboard joysticks disabled. Normal pause is supposedly CTRL-1, and I don't understand why J0B0 would be triggering that. Since you've been in the code, any chance you could take a peek at this?
-
Aha, figured it out. If you map the 5200 keypad to button 0, that will be pause on the Atari 800 for some reason. I moved it to J0B1 and now I can fire without pausing.
-
I'm eager to get Atari 5200 and Atari 800 working better on my system. Is this very hard to setup? The current method (using the one available in the Docs) really kinda sucks.
-
@rkoster Good to head it's working.
@hansolo77 once you have the original emulator setup all you have to do is replace the binary in a ssh shell:
cd /opt/retropie/emulators/atari800/bin/ sudo cp atari800 atari800.original sudo wget https://github.com/futurechild/atari800-rpi/blob/master/atari800?raw=true -O atari800 sudo chmod +x atari800
and adjust the configuration files to suit your needs:
I myself use the following emulators.cfg
atari800
atari800 = "/opt/retropie/emulators/atari800/bin/atari800 -config /opt/retropie/configs/atari800/atari800.cfg %ROM%" default = "atari800"
atari5200
atari5200="echo %ROM: -\ % > /dev/null;/opt/retropie/emulators/atari800/bin/atari800 -config /opt/retropie/configs/atari5200/atari5200.cfg -cart %ROM%" default = "atari5200" atari800 = "/opt/retropie/emulators/atari800/bin/atari800 %ROM%"
and have the following config files:
atari800.cfg
Atari 800 Emulator, Version 3.1.0 ROM_OS_A_PAL=/home/pi/RetroPie/BIOS/ATARIOSA.ROM ROM_OS_BB01R2=/home/pi/RetroPie/BIOS/ATARIXL.ROM ROM_5200=/home/pi/RetroPie/BIOS/5200.ROM ROM_BASIC_C=/home/pi/RetroPie/BIOS/ATARIBAS.ROM ROM_400/800_CUSTOM=/home/pi/RetroPie/BIOS/ATARIOSB.ROM OS_400/800_VERSION=AUTO OS_XL/XE_VERSION=AUTO OS_5200_VERSION=AUTO BASIC_VERSION=AUTO XEGS_GAME_VERSION=AUTO ATARI_FILES_DIR=/home/pi/RetroPie/BIOS HD_READ_ONLY=1 PRINT_COMMAND=lpr %s SCREEN_REFRESH_RATIO=1 MACHINE_TYPE=Atari XL/XE RAM_SIZE=64 DEFAULT_TV_MODE=PAL MOSAIC_RAM_NUM_BANKS=0 AXLON_RAM_NUM_BANKS=0 ENABLE_MAPRAM=1 DISABLE_BASIC=1 ENABLE_SIO_PATCH=1 ENABLE_H_PATCH=1 ENABLE_P_PATCH=1 ENABLE_NEW_POKEY=1 STEREO_POKEY=0 SPEAKER_SOUND=1 BUILTIN_BASIC=1 KEYBOARD_LEDS=0 F_KEYS=0 BUILTIN_GAME=0 KEYBOARD_DETACHED=0 1200XL_JUMPER=0 CFG_SAVE_ON_EXIT=0 CARTRIDGE_TYPE=0 CARTRIDGE_PIGGYBACK_TYPE=0 CARTRIDGE_AUTOREBOOT=1 CASSETTE_LOADED=0 CASSETTE_WRITE_PROTECT=0 RTIME=1 COLOURS_NTSC_SATURATION=0 COLOURS_NTSC_CONTRAST=0 COLOURS_NTSC_BRIGHTNESS=0 COLOURS_NTSC_GAMMA=0.3 COLOURS_NTSC_HUE=0 COLOURS_NTSC_GTIA_DELAY=26.8 COLOURS_NTSC_EXTERNAL_PALETTE_LOADED=0 COLOURS_NTSC_ADJUST_EXTERNAL_PALETTE=0 COLOURS_PAL_SATURATION=0 COLOURS_PAL_CONTRAST=0 COLOURS_PAL_BRIGHTNESS=0 COLOURS_PAL_GAMMA=0.3 COLOURS_PAL_HUE=0 COLOURS_PAL_GTIA_DELAY=23.2 COLOURS_PAL_EXTERNAL_PALETTE= COLOURS_PAL_EXTERNAL_PALETTE_LOADED=0 COLOURS_PAL_ADJUST_EXTERNAL_PALETTE=0 ARTIFACT_NTSC=NONE ARTIFACT_PAL=NONE ARTIFACT_NTSC_MODE=0 SCREEN_SHOW_SPEED=0 SCREEN_SHOW_IO_ACTIVITY=1 SCREEN_SHOW_IO_COUNTER=0 SCREEN_SHOW_1200XL_LEDS=1 SOUND_ENABLED=1 SOUND_RATE=44100 SOUND_BITS=16 SOUND_FRAG_FRAMES=0 SOUND_LATENCY=20 VIDEO_FILTERING=1 VIDEO_ZOOM=1.00 SDL_JOY_0_ENABLED=1 SDL_JOY_0_LEFT=276 SDL_JOY_0_RIGHT=275 SDL_JOY_0_UP=273 SDL_JOY_0_DOWN=274 SDL_JOY_0_TRIGGER=306 SDL_JOY_USE_HAT=1 SDL_JOY_0_SELECT=8 SDL_JOY_0_START=9 SDL_JOY_0_TRIGGER1=1 SDL_JOY_0_TRIGGER2=2 SDL_JOY_0_ASTERISK=0 SDL_JOY_0_HASH=4 SDL_JOY_0_OPTION=5 SDL_JOY_0_SECOND_AXIS=2 SDL_JOY_1_ENABLED=0 SDL_JOY_1_LEFT=97 SDL_JOY_1_RIGHT=100 SDL_JOY_1_UP=119 SDL_JOY_1_DOWN=115 SDL_JOY_1_TRIGGER=306
atari5200.cfg has the following different settings:
MACHINE_TYPE=Atari 5200 RAM_SIZE=16 BUILTIN_BASIC=0
You may want to read this thread trough as there are some interesting posts regarding configuration options and known bugs.
If you run into problems, this forum is a good place to ask for help.
-
@future-child How does the new emulator you ported over handle these issues?
It's been a while now, but I believe that the list of games the two bugs effected was rather small overall. Since I already have all of the controls mapped out on the spreadsheet, I'd just have to figure out how to get them working on the new emulator for the buggy games.
-
@used2berx as far as i have tested all controls work as intended in kat5200, even analog.
I think the work you've done with configs is great and could also be used as a template to create controller mappings for other emulators as well, or at least as a lookup table to link roms to desired controller configurations.
-
@rkoster , I'm having a similar issue where several of my buttons pause the game in Bruce Lee. I'm using a PS3 controller and the 4 primary action buttons pause the game (but still work as mapped to *, # and punch/kick). I have the option / select working, just cant figure out where you remap the 5200 keypad to something other than button 0. Can you provide some details on that? I've read through the thread and poked around in a few files but am missing something. Your help would be appreciated.
-
@greyrhino My Pi setup is currently disconnected but soon as I reconnect it I will post my config file here.
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.