BeebIt with RC15 issues.
Michael Foot (522) 26 posts |
I’ve been alerted to a couple of issues in BeebIt, which show up when using it on a Pi3 with RC15. These issues do not cause a problem with RO4 and were previously OK on RO5. - When playing the game Elite and loading a commander, the keyboard becomes unresponsive. It appears to freeze up, but some characters get through and often characters are missed. BeebIt uses OS_Claim, &10 (EventV) to intercept keyboard presses. Has anything changed in this area recently? - BeebIt uses screen modes 15 or 21. With the addition of EDID, these screen modes are no longer shown as available (using OS_CheckModeValid) so BeebIt uses MODE 28 instead (which truncates the screen). What is the correct way to get at least MODE 21 to be available when using EDID? Thanks for you help, Michael. |
Jon Abbott (1421) 2601 posts |
Do you have any other code that’s interrupt driven, which would cause IRQ to be disabled for short periods, such as the screen update or sound fill code? I had similar issues with some games running under ADFFS until I reworked various tracker Modules and some game code so they left IRQ’s enabled. I recall BlowPipe, HeroQuest, Nevryon, Wolfenstein 3D and possibly a few others were was badly affected by this and unplayable.
This doesn’t answer your query, but so far as retro gaming goes, EDID on the Pi needs disabling as it prevents the key feature of the Pi GPU, namely upscaling. It would be useful if there was an SWI to enable/disable EDID, but I dont believe that’s possible to implement as it requires changes in CONFIG.TXT to enable upscaling and set the base resolution. For MODE 21 to work when EDID is enabled, the monitor will need to support 640×512, which is highly unlikely. The closest resolution is going to be 640×480, so you’re really left with two options, either disable EDID completely in CONFIG.TXT or code a software upscaler. EDIT: I should probably add that it’s not EDID’s at fault, but direct control of the GPU resolution. It would be useful if you could let the user select the physical resolution to use, but leave GPU scaling enabled, but there’s currently no way to do this. Jeffrey – is this possible to implement? |
John Williams (567) 768 posts |
Is this not what the CMDLINE/TXT file does with a line: #https://www.riscosopen.org/forum/forums/4/topics/6792 rather than the CONFIG/TXT file, or am I misunderstanding what you need to do? I quite understand that this still has to occur at Boot. |
Jeffrey Lee (213) 6046 posts |
Is this problem specific to the Pi, or have you seen it on other systems? I can’t think of any changes which could cause a problem like that.
At the moment the correct way is to not use EDID. EDID is designed to report the modes your monitor claims to support, and 512-height modes are an Acornism that monitor manufacturers are unlikely to know or care about when they decide what modes to add to their EDID. So if you want a solution that will work on all systems (EDID isn’t a Pi-only thing), you have the following options:
In the future we’re hoping to have some kind of built-in solution for using legacy modes with EDID, but it will take a while for that plan to come to fruition.
That can be achieved via placing the disable_mode_changes string in cmdline.txt. You’ll be able to use config.txt to select the physical mode, and RISC OS will be in control of the virtual mode, with the GPU handling the scaling. It is possible to switch between the two behaviours at runtime, the only problem is finding an intuitive way for the user/system to control it (and preferably in a platform-agnostic manner) – hence my VMDF suggestion that I linked to above. |
Michael Foot (522) 26 posts |
I’m pretty sure there is no IRQ disabling apart from the sound fill routines but I will check. It’s almost like Elite is generating BBC IRQs and they are not being handled properly.
So far I’ve only tried a RiscPC/RO4 and various Pis/RO5. RiscPC is fine and Pis are not. I’ll try an Iyonix and Beagleboard and see how they behave. I’ll stick a trace around that routine in Elite and see what it’s doing. Elite and other games play fine, it’s just that one place where you type in the commander’s name. Thanks for all the info on EDID. I might have to look at extending BeebIt to use more industry-standard modes as you say. Lack of Bandwidth speed is not so important now. |