Forcing LCDGamesMode on when using a multi scan monitor

Discuss LCDGameModes by Steve Harrison
Idge
Posts: 42
Joined: Wed Feb 02, 2022 9:45 pm

Forcing LCDGamesMode on when using a multi scan monitor

Post by Idge »

I am trying to work out how to force lcdgames mode to be on even when using a multi scan monitor if that is possible?
The reason I ask is although absolutely everything else works on my benq bl702a monitor, boogie buggy doesn’t.
If I change my monitor type to vga, then it works albeit in a squashed half of the screen.
I am guessing that this is because LCDGames mode does not kick in if multi scan monitors are attached.
Is there anyway I can just create a new run file for this game that turns on LCDGamesMode just when running this?

Cheers
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Forcing LCDGamesMode on when using a multi scan monitor

Post by JonAbbott »

Off the top of my head, I don't remember if Boogie Buggie has a mode Module. If it does, it's likely its checking for specific monitor types which might be the root cause of the blank screen, in which case LCDGameModes might not help on a Multi-sync as the game might be using incorrect VIDC parameters to start with.

If the monitor supports 15KHz, do you get an image in the game when MonitorType is set to 0 (TV)?

As you've noticed, LCDGameModes only kicks in with MonitorType 3/4 (VGA/SVGA) and will attempt to correct the screen ratio using timings within the VGA spec.
Idge
Posts: 42
Joined: Wed Feb 02, 2022 9:45 pm

Re: Forcing LCDGamesMode on when using a multi scan monitor

Post by Idge »

JonAbbott wrote: Sun May 01, 2022 6:46 am If the monitor supports 15KHz, do you get an image in the game when MonitorType is set to 0 (TV)?
The Game loads fine and displays the Boogie Buggy intro screen and level select screen and the side view levels work fine. If loading one of the top down levels then you get the bars at the top and bottom displaying, but just black screen in the middle which is strange, as its clearly displaying an image, just not the middle frame.
I get the same issue when monitor set to tv mode. See below
IMG_8575 (1).jpg
IMG_8575 (1).jpg (726.45 KiB) Viewed 7642 times
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Forcing LCDGamesMode on when using a multi scan monitor

Post by JonAbbott »

If it hasn't hung, I would guess the screen memory allocation is possibly wrong? I'd have to check the ADFFS Boot script to see what it requires although I have a vague recollection that it's an odd amount.

I presume you're running it direct from floppy?

EDIT: It requires 256K of screen memory
Idge
Posts: 42
Joined: Wed Feb 02, 2022 9:45 pm

Re: Forcing LCDGamesMode on when using a multi scan monitor

Post by Idge »

I am just using the disk images and using boot floppy via ADFFS.
I have the APDL bundled version on CD as well, but that unfortunately does not work at all, as it needs RISCOS 4+ to work.
I'll double check the screen memory and see, but shouldn't be an issue as I have a 4MB machine
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Forcing LCDGamesMode on when using a multi scan monitor

Post by JonAbbott »

Try running it directly to see if there's an issue with the ADFFS Boot script.

Having not really played the game, how do I get to the level you're seeing this on, so I can try and reproduce it?

I know this game does have at least one bug that I need to fix (swapping discs), some other bugs are already fixed in the Boot script but you'd need to run it on a modern machine running RO5.

EDIT: I think its Sweet Meadow that you're seeing the blank screen on? On a Pi, there's a pause on a screen that looks like your screenshot before it loads and shows the level. There's also a Page Zero access that occurs shortly after.
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Forcing LCDGamesMode on when using a multi scan monitor

Post by JonAbbott »

Having checked the bugs the Boot script is currently fixing, you're falling foul of the "stuck in loop on Disc 3 levels". If I remove that fix, I see the same problem as you.

Make a copy of Disc 3, then edit !Disk_3.GAME.PVC and change the word @ C6C0 from &0A000005 to &E1A00000 - that might get it working. From the Supervisor prompt:

Code: Select all

LOAD !Disk_3.GAME.PVC 9000
MEMORYA C6C0 E1A00000
SAVE !Disk_3.GAME.PVC 9000+CB74
That's a temporary fix I put in a while back, I've yet to investigate what the code is actually supposed to be doing.
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Forcing LCDGamesMode on when using a multi scan monitor

Post by JonAbbott »

Here's a better fix which also gets it running on HD without the floppies being needed. I've only tested it on a Pi although it will implement all the bugfixes on your machine.
  1. Copy the !BUGGY folder from disk 1 to your HD
  2. Copy the contents of !Disk_2.GAME to !BUGGY.GAME
  3. Copy the contents of !Disk_3.GAME to !BUGGY.GAME
  4. Replace !BUGGY.!RUN with !ADFFS.obey.F1005301
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Forcing LCDGamesMode on when using a multi scan monitor

Post by JonAbbott »

Try the script above. It might work, it might not - let me know.

The game is getting stuck in a loop waiting for the FIQ vector to be released when loading a level under emulation. I suspect that might be emulator related and may behave differently on a physical machine, as FIQ will be actively used by ADFS when the game is launched.

Under emulation I'm seeing some odd things. ADFS doesn't release the FIQ vector after being RMReInit'd and only clears it after a floppy is touched - that sounds like a bug in ADFS. Something is also claiming the FIQ vector and not releasing it, which is why I'm seeing it get stuck in a loop.
JonAbbott
Posts: 2938
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: Forcing LCDGamesMode on when using a multi scan monitor

Post by JonAbbott »

Here's the current script. It modifies the sprite code to not use the FIQ vector - that has an impact on the game's blitter performance. It will need testing on physical to see if the impact to performance is an issue, particularly on the title scroller.

It will work on all OS versions, patching the files appropriately for the platform its running on. Just be aware that you won't be able to move the game between platforms once patched as its not dynamically patching.

If you've already tried the script I posted previously, replace TC, SOC and PVC from the original floppies before using this script.

The game needs proper play-testing under the ADFFS 2.80 beta on a Pi to ensure there aren't any other bugs I need to fix.

Code: Select all

| To install to hard disc:
| 1. Copy !BUGGY from disc 1 to HD
| 2. Copy !BUGGY.!Disk_2.GAME from disc 2 into !BUGGY
| 3. Copy !BUGGY.!Disk_3.GAME from disc 3 into !BUGGY
| 4. Replace !BUGGY.!Run with this file

ADFJoystickKeys J1 L=78 R=79 U=87 B1=71 B2=70
| Z      / Left     - Rotate left
| X      / Right    - Rotate right
| /      / Up       - Move forward
| RETURN / B1       - Jump
| '      / B2       - Turbo speed

WimpSlot -min 592k -max 592k
| Allow game to run from HD
SetEval fix$up 1
IfThere <Obey$Dir>.GAME.PVC THEN ELSE SetEval fix$up 0
IfThere <Obey$Dir>.05-09-22 THEN SetEval fix$up 0

IF fix$up THEN LOAD <Obey$Dir>.GAME.TC 12000
IF fix$up THEN ADFCRC 12000 16438
IF fix$up AND ADFFS$CRC=&C70827A3 THEN SetEval skip$file 1 ELSE SetEval skip$file 0
IF fix$up AND NOT skip$file THEN ADFCRC 12000 16438 2DD4B8FC GAME.TC
IF fix$up AND NOT skip$file THEN ECHO Patching GAME.TC
IF fix$up AND NOT skip$file THEN MEMA 14488 "       <Game$Dir>" >162DC "        <Game$Dir>" >16300 "        <Game$Dir>"
IF fix$up AND NOT skip$file THEN MEMA 163B0 "       <Game$Dir>" >163E0 "       <Game$Dir>"
| Bugfix: Page zero access in TC
IF fix$up AND NOT skip$file THEN MEMA 14104 E35300FE 08FD8002 E8BD4020
| Don't use FIQ mode
IF fix$up AND NOT skip$file AND ADFFS$OSVersion>=&35000 THEN MEMA 131E0 E3A04C81 E8847F00 >13264 E3A04C81 E8947F00 >13280 1AFFFFD6 E1A0F00E
IF fix$up AND NOT skip$file AND ADFFS$OSVersion<&35000 THEN MEMA 131E4 EBFFD3C5 >13264 E3A04C81 E9143F00 >13284 EAFFD3A1
| Don't disable FIQ
IF fix$up AND NOT skip$file THEN MEMA 12848 EA000005 >1615C 1A000015 E8BD8000
IF fix$up AND NOT skip$file THEN SAVE <Obey$Dir>.GAME.TC 12000+4438

IF fix$up THEN LOAD <Obey$Dir>.GAME.PV 9780
IF fix$up THEN ADFCRC 9780 9848
IF fix$up AND ADFFS$CRC=&44183CE5 THEN SetEval skip$file 1 ELSE SetEval skip$file 0
IF fix$up AND NOT skip$file THEN ADFCRC 9780 9848 53315635 GAME.PV
IF fix$up AND NOT skip$file THEN ECHO Patching GAME.PV
IF fix$up AND NOT skip$file THEN MEMA 97D4 "        <Game$Dir>" >97FC "        <Game$Dir>" >9824 "        <Game$Dir>"
IF fix$up AND NOT skip$file THEN SAVE <Obey$Dir>.GAME.PV 9780+C8 8000 8000

IF fix$up THEN LOAD <Obey$Dir>.GAME.PVC 9000
IF fix$up THEN ADFCRC 9000 15B73
IF fix$up AND ADFFS$CRC=&CD227560 THEN SetEval skip$file 1 ELSE SetEval skip$file 0
IF fix$up AND NOT skip$file AND ADFFS$CRC=&61D533E THEN ERROR GAME.PVC is an early release and cannot be patched
IF fix$up AND NOT skip$file AND ADFFS$CRC<>&2DE9F7A1 THEN ERROR GAME.PVC does not match the expected file
IF fix$up AND NOT skip$file THEN ECHO Patching GAME.PVC
IF fix$up AND NOT skip$file THEN MEMA 9024 "       <Game$Dir>" >9048 "       <Game$Dir>"
| Bugfix: stuck in loop on Disc 3 levels
IF fix$up AND NOT skip$file THEN MEMA C6C0 E1A00000
| Bugfix: Page zero access @ CB18
IF fix$up AND NOT skip$file THEN MEMA CAE0 11B0F00E
| Bugfix: Crash when killed by a green bug
IF fix$up AND NOT skip$file THEN MEMA E168 E1A0F00E
| Don't use FIQ mode
IF fix$up AND NOT skip$file AND ADFFS$OSVersion>=&35000 THEN MEMA E458 E3A04C81 E8847F00 >E4DC E3A04C81 E8947F00 >E4F8 1AFFFFD6 E1A0F00E
IF fix$up AND NOT skip$file AND ADFFS$OSVersion<&35000 THEN MEMA E45C EBFFE727 >E4DC E3A04C81 E9143F00 >E4FC EAFFE703
| Don't disable FIQ
IF fix$up AND NOT skip$file THEN MEMA 9154 E1A00000 >9160 E8BD8000 >C4D0 EA000005
IF fix$up AND NOT skip$file THEN SAVE <Obey$Dir>.GAME.PVC 9000+CB74

IF fix$up THEN LOAD <Obey$Dir>.GAME.SO 95AC
IF fix$up THEN ADFCRC 95AC 9600
IF fix$up AND ADFFS$CRC=&8AE9BC39 THEN SetEval skip$file 1 ELSE SetEval skip$file 0
IF fix$up AND NOT skip$file THEN ADFCRC 95AC 9600 5651399E GAME.SO
IF fix$up AND NOT skip$file THEN ECHO Patching GAME.SO
IF fix$up AND NOT skip$file THEN MEMA 95E4 "        <Game$Dir>" >960C "        <Game$Dir>"
IF fix$up AND NOT skip$file THEN SAVE <Obey$Dir>.GAME.SO 95AC+84 8000 8000

IF fix$up THEN LOAD <Obey$Dir>.GAME.SOC 9000
IF fix$up THEN ADFCRC 9000 E0F4
IF fix$up AND ADFFS$CRC=&DE44D082 THEN SetEval skip$file 1 ELSE SetEval skip$file 0
IF fix$up AND NOT skip$file THEN ADFCRC 9000 E0F4 38BB479D GAME.SOC
IF fix$up AND NOT skip$file THEN ECHO Patching GAME.SOC
IF fix$up AND NOT skip$file THEN MEMA 900C "       <Game$Dir>" >9030 "       <Game$Dir>"
| Bugfix: Page zero access in SOC @ AF24
IF fix$up AND NOT skip$file THEN MEMA B4E8 A00001A >B4F0 A000018
| Don't use FIQ mode
IF fix$up AND NOT skip$file AND ADFFS$OSVersion>=&35000 THEN MEMA 9E7C E3A04C81 E8847F00 >9F04 E3A04C81 E8947F00 >9F20 1AFFFFD5 E1A0F00E
IF fix$up AND NOT skip$file AND ADFFS$OSVersion<&35000 THEN MEMA 9E80 EBFFF89E >9F04 E3A04C81 E9143F00 >9F24 EAFFF879
| Don't disable FIQ
IF fix$up AND NOT skip$file THEN MEMA 90F4 E1A00000 >9100 E8BD8000 >9A54 EA000005
IF fix$up AND NOT skip$file THEN SAVE <Obey$Dir>.GAME.SOC 9000+50F4

SET Game$Dir <Obey$Dir>
SET ExSound$Dir <Obey$Dir>
SET Sounds$Dir <Obey$Dir>.Sounds
RMEnsure ExSound 3.30 RMLoad ADFFS:trackers.ExSound
Set File$Type_C74 Sound

| Prevent CPU mode change, set R13 and don't change the Exception handler
LOAD <GAME$Dir>.!START
IF fix$up THEN ADFCRC 8000 8244 8F1B0993 !START
IF fix$up THEN SAVE <Obey$Dir>.05-09-22 8000+1
UnSet fix$up
UnSet skip$file

IF ADFFS$OSVersion>=&35000 THEN ADFRemapVideoMemory 13 256 ELSE ScreenSize 256
IF ADFFS$OSVersion>=&35000 THEN MEMA 8000 EF000010 E1A0D001 E1A00000
MEMA 81A4 EF000011
IF ADFFS$OSVersion>=&35000 THEN GOARM3JIT 8000 ELSE GO 8000
| Put our FIQ fixup code @ 8100
MEMA 8100 E3A04C81 E9043F00 E33F03C2 E1A0F00E E3A04C81 E9143F00 E33F0003 E8BD8000
GO 12000
ADFJoystickKeys
IF ADFFS$OSVersion>=&35000 THEN GOARM3JIT
IF ADFFS$OSVersion>=&35000 THEN ADFRemapVideoMemory
RMKill ExSound
UnSet Game$Dir
UnSet ExSound$Dir
UnSet Sounds$Dir
Post Reply