ADFFS 2.80 public beta

Discuss ADFFS development and download test releases
Vanfanel
Posts: 576
Joined: Mon Sep 16, 2013 12:01 am

Re: ADFFS 2.80 public beta

Post by Vanfanel »

@Jon

Doing some tests! Will report anything I find with this new RC.
JonAbbott
Posts: 2608
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: ADFFS 2.80 public beta

Post by JonAbbott »

Assuming no feedback is good feedback, I'll aim to make the final build available over the weekend.
Vanfanel
Posts: 576
Joined: Mon Sep 16, 2013 12:01 am

Re: ADFFS 2.80 public beta

Post by Vanfanel »

@Jon: Saw nothing strange to report in all the games I tested. Had a good play at some of them without anything to report.
Which, as you say, is a very good thing! :)
JonAbbott
Posts: 2608
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: ADFFS 2.80 public beta

Post by JonAbbott »

Thanks, I've just made the final release available via the usual channels. The only difference between it and RC3 is Null dereference checking is turned off - just in case we missed any game bugs during testing.
JonAbbott
Posts: 2608
Joined: Thu Apr 11, 2013 12:13 pm
Location: Essex
Contact:

Re: ADFFS 2.80 public beta

Post by JonAbbott »

Issues noted with SWIV:
  • F1 is not pausing the game and needs holding to do anything (fixed by moving the EventV game code call into the main game loop)
    • the screen update code sits under in IRQ event (EventV originally, Device 3 under the JIT). Pressing F1 puts the code into a loop at 1415C. Ignoring the fact that IRQ code should never loop like this, the IRQ handler doesn't check for re-entrancy and subsequently fills the stack and crashes
    • the game essentially needs rewriting to run under USER or a CallBack that handles re-entrancy
  • Speed issue on physical RiscPC (fixed by adding OS_Byte 19 to main game loop)
    • possibly related to the EventV code being moved to Device 3 to avoid the game causing C based Modules to crash
  • Disc protection check can fail if the game is installed to an ADFS attached HD (fixed vicariously by decrypting Loader for game patching)
    • bug in Loader which only performs the protection check if ADFS is the Temporary Filing System
    • The disk may need reimaging as the check fails when ADFS is forced as the TFS (disk image is good, must be another protection check failing)
    • behaviour of OS_Args 0,0 changed from RISC OS 3 which needs adding to ADFFS
  • 1C1B0 Aborts writing to the screen when exited on a physical RiscPC (fixed vicariously)
    • At the point the Abort occurs, the game's EventV code hasn't been removed and the game hasn't issued OS_Exit, so possibly an Abort being reported and it's not reset the machine fully?
  • Joystick mis-detection on RiscPC (fixed by correcting code)
    • bug in the code that checks for RTFM. It's calling Joy_Read0 when it should be calling Joy_Test
  • Joysticks are being detected with USBJoystick loaded (can't currently be fixed)
    • USBJoystick emulates VTJoystick_Status, Joy_Test and Joystick_Read and there's no SWI to actually detect if a Joystick is attached, so this can't currently be fixed
  • Crashes on the high-score page under RISC OS 3.x (fixed vicariously)
    • this appears to be related to the hardware IRQ vector code that performs the palette swap mid-frame on that screen. I suspect it's corrupting the stack or not handling re-entrancy
  • T1 based palette swap code doesn't account for the pixel clock rate (fixed)
    • Palette swap Y location drifts on a RiscPC. Corrected T1 values for EGAonVGA, which ADFFS uses for MODE 9
    • Palette swap Y offset is slightly out on the highscore page on a GPU. Initial T1 offset adjusted to fix
  • StrongARM issues
    • Crashes when launched if the ADFFS400 Module isn't loaded directly before running the game. Almost certainly CPU cache or IRQ related (to be investigated)
    • Crashes when exited if a key is pressed (fixed)
    • Screen caching causing flickering (fixed by turning off screen caching)
  • ARM6/7 macrocell issues
    • hardlocks when the Event 4 code is called to set the default palette (fixed in ADFFS 2.81)
    • IRQv T1 palette swap code is not working (fixed by running code natively)
  • Title loop runs slightly too fast (fixed by implementing a PLL)

Work-in-progress !Run replacement script:
NOTE: This won't currently work on StrongARM as ADFFS 2.80 falls foul of a CPU errata
  • Updated 18/07/22 to add frame pacing into main game loop, instead of relying on ADFFS
  • Updated 23/07/22:
    • implemented a PLL to update the screen and elements so they match the original on an 8MHz ARM2
    • corrected the music fade-out pause when starting a game
    • game now runs natively on ARM610/710
    • T1 palette swap values corrected for AutoVIDC (used by ADFFS on A-series) and EGA on VGA timings (used by ADFFS on RPC)
    • Switched back to original MusMod2 on A-series to reduce T1 drift cause by QTM

Code: Select all

IF "<Obey$Dir>"="@" THEN ADFS
IF "<Obey$Dir>"="@" THEN Set Obey$Dir ADFS::0.$.!Swiv

Set Swiv$Dir <Obey$dir>
DIR <Swiv$Dir>

RMAFree 200
IF ADFFS$OSVersion>=&35000 THEN RMEnsure QTMTracker   1.43 RMLoad ADFFS:trackers.QTMModule
IF ADFFS$OSVersion>=&35000 THEN RMEnsure MusicModule2 0.06 RMLoad ADFFS:trackers.Musmod2
IF ADFFS$OSVersion>=&35000 THEN Mus2QTM_SWI_Alternative
IF ADFFS$OSVersion>=&35000 THEN Mus2QTM_Linear_Effects 0
IF ADFFS$OSVersion<&35000 THEN RMEnsure MusicModule 1.02 RMLOAD <Swiv$Dir>.MusMod2
Set JSflag 0
IF ADFFS$OSVersion<&50000 THEN RMEnsure Joystick 0.0 Set JSflag 1
IF JSflag>0 THEN RMLoad ADFFS:extras.JoyMod

WimpSlot -min 541k -max 541k
| Decrypt Loader
LOAD <Swiv$Dir>.Loader 6FCC8
LOAD <Swiv$Dir>.Loader 8000
MEMORYA 8000 6FCD0 { > null: }
MEMORYA 8004 E51F000C { > null: }
MEMORYA 8034 EF000011 { > null: }
GO 8004
MEMORYA 8000 6FD04 { > null: }
GO 8004
MEMORYA 8000 6FD38 { > null: }
GO 8004
MEMORYA 8000 6FD6C { > null: }
GO 8004
MEMORYA 8000 6FDA0 { > null: }
GO 8004
| Unpack game code
MEMORYA 7020C E28FE004 { > null: }
MEMORYA 70210 E52DE004 { > null: }
MEMORYA 70218 EF000011 { > null: }
MEMORYA 70674 E28FE004 { > null: }
MEMORYA 70678 E52DE004 { > null: }
MEMORYA 706B0 E28FE004 { > null: }
MEMORYA 706B4 E52DE004 { > null: }
MEMORYA 706C0 E28FE004 { > null: }
MEMORYA 706C4 E52DE004 { > null: }
MEMORYA 706D0 E28FE004 { > null: }
MEMORYA 706D4 E52DE004 { > null: }
MEMORYA 706F0 E28FE004 { > null: }
MEMORYA 706F4 E52DE004 { > null: }
MEMORYA 70710 E28FE004 { > null: }
MEMORYA 70714 E52DE004 { > null: }
MEMORYA 70738 E28FE004 { > null: }
MEMORYA 7073C E52DE004 { > null: }
GO 701EC

| Fix reads from unset variables
MEMORYA 19C10 EA01D4FA { > null: }
MEMORYA 8F000 E59C8374 { > null: }
MEMORYA 8F004 E3380000 { > null: }
MEMORYA 8F008 0AFE2B15 { > null: }
MEMORYA 8F00C EAFE2B00 { > null: }

MEMORYA 2163C EB01B673 { > null: }
MEMORYA 21694 EB01B65D { > null: }
MEMORYA 237F4 EB01AE05 { > null: }
MEMORYA 29D64 EB0194A9 { > null: }
MEMORYA 2A030 EB0193F6 { > null: }
MEMORYA 2A070 EB0193E6 { > null: }
MEMORYA 8F010 E59B8200 { > null: }
MEMORYA 8F014 E3380000 { > null: }
MEMORYA 8F018 11A0F00E { > null: }
MEMORYA 8F01C E20E807C { > null: }
MEMORYA 8F020 E79FF008 { > null: }
MEMORYA 8F068 21670 { > null: }
MEMORYA 8F040 216A8 { > null: }
MEMORYA 8F0A0 23808 { > null: }
MEMORYA 8F090 29D74 { > null: }
MEMORYA 8F05C 2A044 { > null: }
MEMORYA 8F09C 2A174 { > null: }

| Add a delay to the music fade-out loop
MEMORYA 12378 E3A00002 { > null: }
MEMORYA 1237C EF0593CB { > null: }

| Move game code out of EventV
MEMORYA 8618 EA021AB8 { > null: }
MEMORYA 8474 E8BD9FFF { > null: }
MEMORYA 8F100 EF000042 { > null: }
MEMORYA 8F104 E2803006 { > null: }
MEMORYA 8F108 E2804002 { > null: }
MEMORYA 8F10C E58F30EC { > null: }
MEMORYA 8F110 E58F40EC { > null: }
MEMORYA 8F114 E92D8000 { > null: }
MEMORYA 8F118 E1A00000 { > null: }
MEMORYA 8F11C EAFDE632 { > null: }
MEMORYA 8F120 E59F30D8 { > null: }
MEMORYA 8F124 E59F40D8 { > null: }
MEMORYA 8F128 EF000042 { > null: }
MEMORYA 8F12C E1500004 { > null: }
MEMORYA 8F130 2BFDE54F { > null: }
MEMORYA 8F134 E1500004 { > null: }
MEMORYA 8F138 22844002 { > null: }
MEMORYA 8F13C E1500003 { > null: }
MEMORYA 8F140 3AFFFFF8 { > null: }
MEMORYA 8F144 E2833006 { > null: }
MEMORYA 8F148 EBFDE569 { > null: }
MEMORYA 8F14C EAFFFFEB { > null: }

| Switch from IRQv to IRQ1V
MEMORYA 19B78 E51FF004 { > null: }
MEMORYA 19B80 E3A01C01 { > null: }
MEMORYA 19BB4 E1A00000 { > null: }
MEMORYA 19BBC EA000003 { > null: }
MEMORYA 19BDC E3A01C01 { > null: }

| Bugfix Key debounce code
MEMORYA 80EC E33100FF { > null: }
MEMORYA 80F0 1A000001 { > null: }

| Bugfix RTFM detection
MEMORYA 1E448 E92D0400 { > null: }
MEMORYA 1E44C E3A0A000 { > null: }
MEMORYA 1E450 E3A00000 { > null: }
MEMORYA 1E454 EF063F40 { > null: }
MEMORYA 1E458 73A0A001 { > null: }
MEMORYA 1E45C EF0A1540 { > null: }
MEMORYA 1E460 73A0A002 { > null: }
MEMORYA 1E464 E3A00001 { > null: }
MEMORYA 1E468 EF0EFFC2 { > null: }
MEMORYA 1E46C E3300000 { > null: }
MEMORYA 1E470 03A0A003 { > null: }
MEMORYA 1E474 E50CA008 { > null: }
MEMORYA 1E478 E8BD8400 { > null: }

| Correct T1 palette swap timer
IF ADFFS$LCDGM="Y" OR ADFFS$VIDC20 THEN MEMORYA 19B40 E1A0E30E { > null: }
IF ADFFS$LCDGM="Y" OR ADFFS$VIDC20 THEN MEMORYA 19C3C E1A00300 { > null: }
IF ADFFS$OSVersion>=&50000 THEN MEMORYA 19C40 E2800D6E { > null: }
IF ADFFS$VIDC20 THEN MEMORYA 19C40 E2800D9F { > null: }
IF ADFFS$LCDGM="Y" THEN MEMORYA 19C40 E2800DBF { > null: }

IF ADFFS$CPUID=&A10 THEN ADFScreenCaching Off
IF ADFFS$OSVersion>=&35000 THEN ADFRemapVideoMemory 9 160 ELSE ScreenSize 160
IF ADFFS$CPUID>=&A10 THEN GOARM3JIT 0
GO 8000
IF ADFFS$CPUID=&A10 THEN ADFScreenCaching On
IF ADFFS$CPUID>=&A10 THEN GOARM3JIT
IF ADFFS$OSVersion>=&35000 THEN ADFRemapVideoMemory
RMKill MusicModule2
IF ADFFS$OSVersion>=&35000 THEN RMKill QTMTracker
IF JSflag>0 THEN RMEnsure Joystick 0.0 Set JSflag 0
IF JSflag>0 THEN RMKill Joystick
Unset JSflag
Unset Swiv$Dir
Back
Post Reply